> ## 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.

# Genomic Intelligence

> [Genomic Intelligence](https://genomicintelligence.ai) serves transformer DNA language models that score regulatory function directly from sequence. This toolkit exposes seven tools over its [`/v1` REST API](https://docs.genomicintelligence.ai): `gi-promoter` (promoter regions), `gi-splice` (donor and acceptor sites), `gi-enhancer` (enhancer activity), `gi-chromatin` (chromatin state), `gi-annotation` (de-novo transcripts), `gi-expression` (expression from a TSS window), and `gi-find-genes-and-predict-expression` (both, in one call). Inference runs on the vendor's service, so no weights are downloaded and no GPU is needed.

<div class="page-hero"><img class="page-hero-banner" src="https://proto-bio.github.io/proto-assets/images/tool/genomic_intelligence/hero.png" alt="Genomic Intelligence" /><div class="tool-org-badges page-hero-badges"><a href="/docs/tools/organizations/genomic-intelligence" class="tool-org-badge" style={{background: "#111111"}} title="Genomic Intelligence"><img src="https://mintcdn.com/bio-pro/HNsZvj6f9nz_ewfp/assets/images/cached/6c635f3b12f1.png?fit=max&auto=format&n=HNsZvj6f9nz_ewfp&q=85&s=a26ece816244e16a26fa8b893d324a37" alt="" class="tool-org-badge-logo" width="471" height="470" data-path="assets/images/cached/6c635f3b12f1.png" /> Genomic Intelligence</a></div></div>

<Note>
  **License:** Genomic Intelligence is a client for the hosted Genomic Intelligence API; inference runs on the vendor's service under Genomic Intelligence Terms of Service. Submitted sequences are transmitted to Genomic Intelligence. Attribution to Genomic Intelligence is required when results are redistributed. The client wrapper code is MIT-licensed. Please refer to [the service terms](https://docs.genomicintelligence.ai) for full terms. Research and development use. Not for clinical or diagnostic decisions.
</Note>

<p class="entity-disclaimer">Proto is not affiliated with Genomic Intelligence. This toolkit is open source and builds on the implementation produced by this organization. Product names, logos, and trademarks are the property of their respective owners.</p>

<hr class="entity-rule" />

<input type="radio" name="tab-genomic-intelligence" id="none-genomic-intelligence" class="tab-radio-input" />

<input type="radio" name="tab-genomic-intelligence" id="website-genomic-intelligence" class="tab-radio-input" defaultChecked />

<input type="radio" name="tab-genomic-intelligence" id="cite-genomic-intelligence" class="tab-radio-input" />

<input type="radio" name="tab-genomic-intelligence" id="source-genomic-intelligence" class="tab-radio-input" />

<input type="radio" name="tab-genomic-intelligence" id="notebook-genomic-intelligence" class="tab-radio-input" />

<input type="radio" name="tab-genomic-intelligence" id="proto-genomic-intelligence" class="tab-radio-input" />

<div class="tool-tab-bar">
  <span class="tool-tab-wrap"><label for="website-genomic-intelligence" class="tool-tab tab-open badge-website"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10" /><path d="M2 12h20M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z" /></svg> Website</label><label for="none-genomic-intelligence" class="tool-tab tab-close badge-website"><svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="10" /><path d="M2 12h20M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z" /></svg> Website</label></span> <span class="tool-tab-wrap"><label for="cite-genomic-intelligence" 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-genomic-intelligence" 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> <span class="tool-tab-wrap"><label for="source-genomic-intelligence" 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> Tool Source</label><label for="none-genomic-intelligence" 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> Tool Source</label></span> <span class="tool-tab-wrap"><label for="notebook-genomic-intelligence" class="tool-tab tab-open badge-notebook"><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="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z" /><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" /></svg> Open as Notebook</label><label for="none-genomic-intelligence" class="tool-tab tab-close badge-notebook"><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="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z" /><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" /></svg> Open as Notebook</label></span> <span class="tool-tab-wrap"><label for="proto-genomic-intelligence" class="tool-tab tab-open badge-local"><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="4 17 10 11 4 5" /><line x1="12" y1="19" x2="20" y2="19" /></svg> Run Locally</label><label for="none-genomic-intelligence" class="tool-tab tab-close badge-local"><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="4 17 10 11 4 5" /><line x1="12" y1="19" x2="20" y2="19" /></svg> Run Locally</label></span>
</div>

<a href="https://genomicintelligence.ai" target="_blank" class="tab-panel website-panel" data-tab="website-genomic-intelligence">
  <div class="website-info">
    <img src="https://www.google.com/s2/favicons?domain=genomicintelligence.ai&sz=32" class="website-favicon" width="24" height="24" />

    <span class="website-url">genomicintelligence.ai</span>
  </div>

  <span class="panel-goto-btn website-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"><circle cx="12" cy="12" r="10" /><path d="M2 12h20M12 2a15.3 15.3 0 0 1 4 10 15.3 15.3 0 0 1-4 10 15.3 15.3 0 0 1-4-10 15.3 15.3 0 0 1 4-10z" /></svg> Visit website</span></span>
</a>

<div class="tab-panel cite-panel" data-tab="cite-genomic-intelligence">
  <div class="cite-code-wrap">
    ```bibtex theme={null}
    @misc{genomic_intelligence_api,
      title        = {Genomic Intelligence: DNA sequence analysis API},
      author       = {{Genomic Intelligence}},
      year         = {2026},
      howpublished = {\url{https://docs.genomicintelligence.ai}},
      note         = {Hosted transformer DNA language models for promoter, splice, enhancer,
                      chromatin, expression and gene-annotation prediction. Accessed 2026-08-19.}
    }
    ```
  </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>

<a href="https://github.com/evo-design/proto-tools/tree/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence" target="_blank" class="tab-panel source-panel" data-tab="source-genomic-intelligence">
  <div class="source-info">
    <img src="https://github.com/evo-design.png?size=40" class="source-avatar" width="36" height="36" />

    <span class="source-path">evo-design/proto-tools<span class="source-subpath">/proto\_tools/tools/sequence\_scoring/genomic\_intelligence</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>

<a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/examples/example.ipynb" target="_blank" class="tab-panel notebook-panel" data-tab="notebook-genomic-intelligence">
  <div class="notebook-info">
    <span class="notebook-icon">
      <svg width="40" height="40" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
        <path d="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z" />

        <path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" />
      </svg>
    </span>

    <span class="notebook-label">Open Notebook</span>
  </div>

  <span class="panel-goto-btn notebook-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="M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z" /><path d="M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z" /></svg> Open notebook</span></span>
</a>

<div class="tab-panel proto-panel run-local-panel" data-tab="proto-genomic-intelligence">
  <a href="https://github.com/evo-design/proto-tools" target="_blank" class="run-local-preview">
    <img noZoom src="https://opengraph.githubassets.com/1/evo-design/proto-tools" alt="proto-tools on GitHub" />
  </a>

  <div class="run-local-install">
    <span class="run-local-label">Run locally with proto-tools</span>

    <div class="run-local-code">
      ```bash theme={null}
      pip install git+https://github.com/evo-design/proto-tools.git
      ```
    </div>
  </div>
</div>

<div class="entity-contributors entity-contributors-developed"><span class="entity-contributors-label">Toolkit contributors</span><a class="entity-contributors-org" href="/docs/tools/organizations/genomic-intelligence" style={{borderLeftColor: "#111111"}} title="Genomic Intelligence"><img noZoom class="entity-contributors-org-logo" src="https://mintcdn.com/bio-pro/HNsZvj6f9nz_ewfp/assets/images/cached/6c635f3b12f1.png?fit=max&auto=format&n=HNsZvj6f9nz_ewfp&q=85&s=a26ece816244e16a26fa8b893d324a37" alt="" loading="lazy" width="471" height="470" data-path="assets/images/cached/6c635f3b12f1.png" /><span class="entity-contributors-org-role">Developed by</span><span class="entity-contributors-org-name">Genomic Intelligence</span></a><span class="entity-contributors-people"><a class="entity-contributor" href="https://github.com/boldakov" target="_blank" rel="noopener" title="boldakov: 2 commits"><img noZoom class="entity-contributor-avatar" src="https://avatars.githubusercontent.com/u/3984591?v=4&s=64" alt="" loading="lazy" /><span class="entity-contributor-login">boldakov</span></a></span></div>

| Function                                     | Description                                                                                          |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| -------------------------------------------- | ---------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `run_gi_annotation()`                        | Find genes and transcripts de novo in raw DNA via the hosted Genomic Intelligence API                | <a href="#api-run-gi-annotation" class="func-table-btn func-api-btn"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20" /></svg> Docs</a> <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_annotation.py#L275" target="_blank" class="func-table-btn func-source-btn"><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>                                               |
| `run_gi_chromatin()`                         | Predict chromatin accessibility, TF occupancy and histone marks via the hosted Genomic Intelligen... | <a href="#api-run-gi-chromatin" class="func-table-btn func-api-btn"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20" /></svg> Docs</a> <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_chromatin.py#L231" target="_blank" class="func-table-btn func-source-btn"><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>                                                 |
| `run_gi_enhancer()`                          | Predict developmental and housekeeping enhancer activity via the hosted Genomic Intelligence API     | <a href="#api-run-gi-enhancer" class="func-table-btn func-api-btn"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20" /></svg> Docs</a> <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_enhancer.py#L219" target="_blank" class="func-table-btn func-source-btn"><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>                                                   |
| `run_gi_expression()`                        | Predict gene expression from a TSS-centred window via the hosted Genomic Intelligence API            | <a href="#api-run-gi-expression" class="func-table-btn func-api-btn"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20" /></svg> Docs</a> <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_expression.py#L278" target="_blank" class="func-table-btn func-source-btn"><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>                                               |
| `run_gi_find_genes_and_predict_expression()` | Annotate genes in a locus and predict expression for each, via the hosted Genomic Intelligence API   | <a href="#api-run-gi-find-genes-and-predict-expression" class="func-table-btn func-api-btn"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20" /></svg> Docs</a> <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_find_genes_and_predict_expression.py#L293" target="_blank" class="func-table-btn func-source-btn"><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> |
| `run_gi_promoter()`                          | Predict promoter regions in DNA via the hosted Genomic Intelligence API                              | <a href="#api-run-gi-promoter" class="func-table-btn func-api-btn"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20" /></svg> Docs</a> <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_promoter.py#L265" target="_blank" class="func-table-btn func-source-btn"><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>                                                   |
| `run_gi_splice()`                            | Predict splice donor and acceptor sites via the hosted Genomic Intelligence API                      | <a href="#api-run-gi-splice" class="func-table-btn func-api-btn"><svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M4 19.5v-15A2.5 2.5 0 0 1 6.5 2H19a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6.5a1 1 0 0 1 0-5H20" /></svg> Docs</a> <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_splice.py#L268" target="_blank" class="func-table-btn func-source-btn"><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>                                                       |

> This toolkit was developed by [Genomic Intelligence](https://genomicintelligence.ai/).

## Background

Sequence-to-function models predict regulatory readouts from DNA alone, without an assay. Genomic Intelligence hosts a family of them behind one API: promoter and enhancer classifiers, a splice-site model, a chromatin-state panel spanning accessibility, transcription-factor occupancy and histone marks, a structure-aware gene finder, and an expression model conditioned on experimental context. Each task is a separate published operation with its own request schema and its own minimum input length, so bounds are per task rather than global.

Every tool here is a thin HTTPS client. A request carries the sequence and the task's options; the service resolves which model version to run, so `model` is left unset by default and the alternatives are enumerable through `GET /v1/tasks/{task}/models`. Delivery is a per-request choice on every endpoint: omitting the `Prefer` header returns the result synchronously, while `respond_async` returns a job id to poll. Coordinates in tool outputs are 0-based with exclusive ends, following the genomics interval convention used elsewhere in `sequence_scoring` rather than the 1-based residue numbering used across the rest of proto-tools.

### Learning Resources

* [Genomic Intelligence API reference](https://docs.genomicintelligence.ai) (Genomic Intelligence) - endpoint documentation, worked examples, and the per-task input bounds.
* [OpenAPI document](https://api.genomicintelligence.ai/v1/openapi.json) (Genomic Intelligence) - the machine-readable contract: every field, bound, enum and status code.

## Tools

<a name="api-run-gi-promoter" />

<div class="tool-section-card">
  ### GI Promoter (`gi-promoter`)

  Slides a promoter classifier across the sequence and returns the windows called as promoters, the contiguous regions they form, and the per-window probabilities behind both.

  #### API Reference

  <div class="api-model-section api-input-section">
    <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_promoter.py#L38" 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>

    <Accordion title="Input: GIPromoterInput">
      <ParamField path="sequences" type="List[GISequence]" required>
        Sequences to score. A bare DNA string is accepted and coerced. Each must be at least 300 bp, the endpoint's published floor.

        <Expandable title="GISequence">
          <ParamField path="sequence" type="string" required>
            DNA sequence. Length bounds are per task and are checked against the endpoint's published values before any request.
          </ParamField>

          <ParamField path="name" type="string" default="sequence">
            Label echoed back in the response, useful for correlating results in a batch.
          </ParamField>
        </Expandable>
      </ParamField>
    </Accordion>
  </div>

  <div class="api-model-section api-config-section">
    <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_promoter.py#L60" 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>

    <Accordion title="Config: GIPromoterConfig">
      <ParamField path="threshold" type="number" default="0.5">
        Probability above which a window is called a promoter. Applied server-side.
      </ParamField>

      <ParamField path="verbose" type="integer" default="0">
        Verbosity level (0=quiet, 1=info, 2=debug, 3=raw subprocess stderr). `True` is coerced to `1` and `False` to `0`.
      </ParamField>

      <ParamField path="device" type="string" default="cpu">
        Device to run the tool on.
      </ParamField>

      <ParamField path="timeout" type="integer" default="3600">
        Maximum execution time in seconds. `None` waits indefinitely.
      </ParamField>

      <ParamField path="seed" type="integer">
        Random seed. When set, tools run reproducibly up to small GPU float noise (see `BaseToolOutput.approx_equal`), and the seed participates in cache keys. When None, cacheable seed-sensitive tools skip cache until seeded.
      </ParamField>

      <ParamField path="gi_api_key" type="string">
        Bearer key for the hosted API. Defaults to the `GI_API_KEY` environment variable.
      </ParamField>

      <ParamField path="model" type="string">
        Model identifier. Leave unset: the service resolves the current default for the task.
      </ParamField>

      <ParamField path="respond_async" type="boolean" default="False">
        Request `202` + polling instead of a synchronous `200`. A per-request delivery choice available on every endpoint.
      </ParamField>

      <ParamField path="timeout_seconds" type="number" default="1800.0">
        Wall-clock cap on the async wait.
      </ParamField>
    </Accordion>
  </div>

  <div class="api-model-section api-output-section">
    <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_promoter.py#L157" 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>

    <Accordion title="Output: GIPromoterOutput">
      <ResponseField name="results" type="List[GIPromoterResult]" required>
        One result per submitted sequence, in the order submitted.

        <Expandable title="GIPromoterResult">
          <ResponseField name="name" type="string" required>
            Label supplied with the sequence.
          </ResponseField>

          <ResponseField name="sequence_length" type="integer" required>
            Length of the submitted sequence in base pairs.
          </ResponseField>

          <ResponseField name="promoter_windows" type="integer" required>
            Number of windows that cleared the threshold.
          </ResponseField>

          <ResponseField name="total_windows" type="integer" required>
            Number of windows scored.
          </ResponseField>

          <ResponseField name="max_probability" type="number">
            Highest window probability, or None when no window was scored.
          </ResponseField>

          <ResponseField name="regions" type="List[PromoterRegion]">
            Regions called as promoters.
          </ResponseField>

          <ResponseField name="windows" type="List[PromoterWindow]">
            Every scored window.
          </ResponseField>

          <ResponseField name="meta" type="GIRequestMeta" required>
            Provenance for the call.
          </ResponseField>
        </Expandable>
      </ResponseField>
    </Accordion>
  </div>

  #### Applications

  Use this to locate transcription start regions in unannotated sequence, or to score designed constructs for promoter strength inside an optimization loop. The per-window probabilities make it usable as a fitness signal rather than only a binary call.

  #### Usage Tips

  * **Minimum input is 300 bp.** This is a task floor published on the endpoint's request schema, so selecting a different `model` does not lower it.
  * **Windows shorter than the model's context are padded.** A short sequence still scores, but the model sees padding; compare against the model's context window when interpreting a marginal call.
  * **`threshold` is applied server-side.** Lowering it returns more regions without re-running inference.

  <a name="api-run-gi-splice" />
</div>

<div class="tool-section-card">
  ### GI Splice Sites (`gi-splice`)

  Predicts splice donor and acceptor sites, returning each site's span, class and score together with per-class counts.

  #### API Reference

  <div class="api-model-section api-input-section">
    <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_splice.py#L43" 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>

    <Accordion title="Input: GISpliceInput">
      <ParamField path="sequences" type="List[GISequence]" required>
        Sequences to score, in transcript orientation. A bare DNA string is accepted and coerced. Each must be at least 100 bp, the endpoint's published floor.

        <Expandable title="GISequence">
          <ParamField path="sequence" type="string" required>
            DNA sequence. Length bounds are per task and are checked against the endpoint's published values before any request.
          </ParamField>

          <ParamField path="name" type="string" default="sequence">
            Label echoed back in the response, useful for correlating results in a batch.
          </ParamField>
        </Expandable>
      </ParamField>
    </Accordion>
  </div>

  <div class="api-model-section api-config-section">
    <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_splice.py#L65" 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>

    <Accordion title="Config: GISpliceConfig">
      <ParamField path="threshold" type="number" default="0.5">
        Score above which a position is reported as a site. Values at or near zero return every scored position and produce very large responses; the default is a good working value.
      </ParamField>

      <ParamField path="site_types" type="array">
        Restrict the reported site classes. Leave unset to report both.
      </ParamField>

      <ParamField path="verbose" type="integer" default="0">
        Verbosity level (0=quiet, 1=info, 2=debug, 3=raw subprocess stderr). `True` is coerced to `1` and `False` to `0`.
      </ParamField>

      <ParamField path="device" type="string" default="cpu">
        Device to run the tool on.
      </ParamField>

      <ParamField path="timeout" type="integer" default="3600">
        Maximum execution time in seconds. `None` waits indefinitely.
      </ParamField>

      <ParamField path="seed" type="integer">
        Random seed. When set, tools run reproducibly up to small GPU float noise (see `BaseToolOutput.approx_equal`), and the seed participates in cache keys. When None, cacheable seed-sensitive tools skip cache until seeded.
      </ParamField>

      <ParamField path="gi_api_key" type="string">
        Bearer key for the hosted API. Defaults to the `GI_API_KEY` environment variable.
      </ParamField>

      <ParamField path="model" type="string">
        Model identifier. Leave unset: the service resolves the current default for the task.
      </ParamField>

      <ParamField path="respond_async" type="boolean" default="False">
        Request `202` + polling instead of a synchronous `200`. A per-request delivery choice available on every endpoint.
      </ParamField>

      <ParamField path="timeout_seconds" type="number" default="1800.0">
        Wall-clock cap on the async wait.
      </ParamField>
    </Accordion>
  </div>

  <div class="api-model-section api-output-section">
    <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_splice.py#L156" 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>

    <Accordion title="Output: GISpliceOutput">
      <ResponseField name="results" type="List[GISpliceResult]" required>
        One result per submitted sequence, in the order submitted.

        <Expandable title="GISpliceResult">
          <ResponseField name="name" type="string" required>
            Label supplied with the sequence.
          </ResponseField>

          <ResponseField name="sequence_length" type="integer" required>
            Length of the submitted sequence in base pairs.
          </ResponseField>

          <ResponseField name="total_sites" type="integer" required>
            Number of sites reported.
          </ResponseField>

          <ResponseField name="donor_sites" type="integer" required>
            Number of donor sites reported.
          </ResponseField>

          <ResponseField name="acceptor_sites" type="integer" required>
            Number of acceptor sites reported.
          </ResponseField>

          <ResponseField name="sites" type="List[SpliceSite]">
            The reported sites.
          </ResponseField>

          <ResponseField name="meta" type="GIRequestMeta" required>
            Provenance for the call.
          </ResponseField>
        </Expandable>
      </ResponseField>
    </Accordion>
  </div>

  #### Applications

  Use this to locate exon boundaries in unannotated transcripts, to check whether a designed edit creates or destroys a splice site, or to screen variants for splice disruption.

  #### Usage Tips

  * **Submit transcript orientation.** The model is strand-specific, and the wrong strand does not fail loudly: it returns sites at different positions, frequently at high confidence. No score or count identifies a mis-oriented submission after the fact, so reverse-complement minus-strand genes before calling.
  * **A site's `start`/`end` is a token span, not the junction base.** It bounds one variable-width tokenizer token — 4–10 bp across the sequences measured so far — and the exon/intron boundary lies somewhere inside it. Locate a boundary to within the span; do not reduce the pair to a single base position, and do not intersect it against reference annotation as though it were one.
  * **Minimum input is 100 bp.**
  * **Very low thresholds return every scored position.** The response grows accordingly; the default is a working value.

  <a name="api-run-gi-enhancer" />
</div>

<div class="tool-section-card">
  ### GI Enhancer Activity (`gi-enhancer`)

  Scores developmental and housekeeping enhancer activity per window, following the STARR-seq split between the two programmes.

  #### API Reference

  <div class="api-model-section api-input-section">
    <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_enhancer.py#L40" 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>

    <Accordion title="Input: GIEnhancerInput">
      <ParamField path="sequences" type="List[GISequence]" required>
        Sequences to score. A bare DNA string is accepted and coerced. Each must be at least 50 bp, the endpoint's published floor.

        <Expandable title="GISequence">
          <ParamField path="sequence" type="string" required>
            DNA sequence. Length bounds are per task and are checked against the endpoint's published values before any request.
          </ParamField>

          <ParamField path="name" type="string" default="sequence">
            Label echoed back in the response, useful for correlating results in a batch.
          </ParamField>
        </Expandable>
      </ParamField>
    </Accordion>
  </div>

  <div class="api-model-section api-config-section">
    <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_enhancer.py#L62" 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>

    <Accordion title="Config: GIEnhancerConfig">
      <ParamField path="verbose" type="integer" default="0">
        Verbosity level (0=quiet, 1=info, 2=debug, 3=raw subprocess stderr). `True` is coerced to `1` and `False` to `0`.
      </ParamField>

      <ParamField path="device" type="string" default="cpu">
        Device to run the tool on.
      </ParamField>

      <ParamField path="timeout" type="integer" default="3600">
        Maximum execution time in seconds. `None` waits indefinitely.
      </ParamField>

      <ParamField path="seed" type="integer">
        Random seed. When set, tools run reproducibly up to small GPU float noise (see `BaseToolOutput.approx_equal`), and the seed participates in cache keys. When None, cacheable seed-sensitive tools skip cache until seeded.
      </ParamField>

      <ParamField path="gi_api_key" type="string">
        Bearer key for the hosted API. Defaults to the `GI_API_KEY` environment variable.
      </ParamField>

      <ParamField path="model" type="string">
        Model identifier. Leave unset: the service resolves the current default for the task.
      </ParamField>

      <ParamField path="respond_async" type="boolean" default="False">
        Request `202` + polling instead of a synchronous `200`. A per-request delivery choice available on every endpoint.
      </ParamField>

      <ParamField path="timeout_seconds" type="number" default="1800.0">
        Wall-clock cap on the async wait.
      </ParamField>
    </Accordion>
  </div>

  <div class="api-model-section api-output-section">
    <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_enhancer.py#L125" 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>

    <Accordion title="Output: GIEnhancerOutput">
      <ResponseField name="results" type="List[GIEnhancerResult]" required>
        One result per submitted sequence, in the order submitted.

        <Expandable title="GIEnhancerResult">
          <ResponseField name="name" type="string" required>
            Label supplied with the sequence.
          </ResponseField>

          <ResponseField name="sequence_length" type="integer" required>
            Length of the submitted sequence in base pairs.
          </ResponseField>

          <ResponseField name="total_windows" type="integer" required>
            Number of windows scored.
          </ResponseField>

          <ResponseField name="dev_score_max" type="number">
            Highest developmental score.
          </ResponseField>

          <ResponseField name="hk_score_max" type="number">
            Highest housekeeping score.
          </ResponseField>

          <ResponseField name="windows" type="List[EnhancerWindow]">
            Every scored window.
          </ResponseField>

          <ResponseField name="meta" type="GIRequestMeta" required>
            Provenance for the call.
          </ResponseField>
        </Expandable>
      </ResponseField>
    </Accordion>
  </div>

  #### Applications

  Use this to rank candidate enhancers, or as a dual-objective fitness function when designing regulatory elements that favour one programme over the other.

  #### Usage Tips

  * **Minimum input is 50 bp**, the lowest floor in the toolkit.
  * **The developmental/housekeeping split is a *Drosophila* assay definition.** Read the two scores as relative activity within a comparison rather than as calibrated cross-species values.
  * **The endpoint declares no task-specific options.** Only the shared configuration applies.

  <a name="api-run-gi-chromatin" />
</div>

<div class="tool-section-card">
  ### GI Chromatin State (`gi-chromatin`)

  Scores each window against a large panel of chromatin assays across many cell types, returning how many calls clear the threshold, per window and per assay category.

  #### API Reference

  <div class="api-model-section api-input-section">
    <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_chromatin.py#L39" 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>

    <Accordion title="Input: GIChromatinInput">
      <ParamField path="sequences" type="List[GISequence]" required>
        Sequences to score. A bare DNA string is accepted and coerced. Each must be at least 200 bp, the endpoint's published floor.

        <Expandable title="GISequence">
          <ParamField path="sequence" type="string" required>
            DNA sequence. Length bounds are per task and are checked against the endpoint's published values before any request.
          </ParamField>

          <ParamField path="name" type="string" default="sequence">
            Label echoed back in the response, useful for correlating results in a batch.
          </ParamField>
        </Expandable>
      </ParamField>
    </Accordion>
  </div>

  <div class="api-model-section api-config-section">
    <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_chromatin.py#L61" 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>

    <Accordion title="Config: GIChromatinConfig">
      <ParamField path="threshold" type="number" default="0.5">
        Probability above which an assay call is reported. The panel is large, so lowering this materially increases response size.
      </ParamField>

      <ParamField path="verbose" type="integer" default="0">
        Verbosity level (0=quiet, 1=info, 2=debug, 3=raw subprocess stderr). `True` is coerced to `1` and `False` to `0`.
      </ParamField>

      <ParamField path="device" type="string" default="cpu">
        Device to run the tool on.
      </ParamField>

      <ParamField path="timeout" type="integer" default="3600">
        Maximum execution time in seconds. `None` waits indefinitely.
      </ParamField>

      <ParamField path="seed" type="integer">
        Random seed. When set, tools run reproducibly up to small GPU float noise (see `BaseToolOutput.approx_equal`), and the seed participates in cache keys. When None, cacheable seed-sensitive tools skip cache until seeded.
      </ParamField>

      <ParamField path="gi_api_key" type="string">
        Bearer key for the hosted API. Defaults to the `GI_API_KEY` environment variable.
      </ParamField>

      <ParamField path="model" type="string">
        Model identifier. Leave unset: the service resolves the current default for the task.
      </ParamField>

      <ParamField path="respond_async" type="boolean" default="False">
        Request `202` + polling instead of a synchronous `200`. A per-request delivery choice available on every endpoint.
      </ParamField>

      <ParamField path="timeout_seconds" type="number" default="1800.0">
        Wall-clock cap on the async wait.
      </ParamField>
    </Accordion>
  </div>

  <div class="api-model-section api-output-section">
    <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_chromatin.py#L136" 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>

    <Accordion title="Output: GIChromatinOutput">
      <ResponseField name="results" type="List[GIChromatinResult]" required>
        One result per submitted sequence, in the order submitted.

        <Expandable title="GIChromatinResult">
          <ResponseField name="name" type="string" required>
            Label supplied with the sequence.
          </ResponseField>

          <ResponseField name="sequence_length" type="integer" required>
            Length of the submitted sequence in base pairs.
          </ResponseField>

          <ResponseField name="total_windows" type="integer" required>
            Number of windows scored.
          </ResponseField>

          <ResponseField name="total_annotations" type="integer" required>
            Assay calls above the threshold, summed.
          </ResponseField>

          <ResponseField name="category_counts" type="Dict[string, integer]">
            Calls per assay category.
          </ResponseField>

          <ResponseField name="windows" type="List[ChromatinWindow]">
            Per-window call counts.
          </ResponseField>

          <ResponseField name="meta" type="GIRequestMeta" required>
            Provenance for the call.
          </ResponseField>
        </Expandable>
      </ResponseField>
    </Accordion>
  </div>

  #### Applications

  Use this to ask whether a sequence looks accessible, bound, or marked in a given cellular context, and to compare designed variants against a natural reference across many assays at once.

  #### Usage Tips

  * **Minimum input is 200 bp.**
  * **The panel is large.** Lowering `threshold` materially increases the size of the response the service returns.
  * **Calls span many cell types and assays.** The tool reports totals and per-category counts rather than the individual calls, so a high count is not evidence about any one cellular context.

  <a name="api-run-gi-annotation" />
</div>

<div class="tool-section-card">
  ### GI Gene Annotation (`gi-annotation`)

  Finds transcripts de novo in raw sequence with no reference, returning each transcript's bounds, strand, confidence score, and TSS and poly(A) positions.

  #### API Reference

  <div class="api-model-section api-input-section">
    <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_annotation.py#L46" 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>

    <Accordion title="Input: GIAnnotationInput">
      <ParamField path="sequences" type="List[GISequence]" required>
        Sequences to annotate. A bare DNA string is accepted and coerced. Each must be at least 1,000 bp, the endpoint's published floor.

        <Expandable title="GISequence">
          <ParamField path="sequence" type="string" required>
            DNA sequence. Length bounds are per task and are checked against the endpoint's published values before any request.
          </ParamField>

          <ParamField path="name" type="string" default="sequence">
            Label echoed back in the response, useful for correlating results in a batch.
          </ParamField>
        </Expandable>
      </ParamField>
    </Accordion>
  </div>

  <div class="api-model-section api-config-section">
    <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_annotation.py#L68" 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>

    <Accordion title="Config: GIAnnotationConfig">
      <ParamField path="batch_size" type="integer">
        Server-side batching hint. Leave unset for the service default.
      </ParamField>

      <ParamField path="reverse_complement" type="boolean">
        Also scan the reverse complement. Detection already finds genes on either strand, so this changes the reported orientation rather than whether genes are found.
      </ParamField>

      <ParamField path="verbose" type="integer" default="0">
        Verbosity level (0=quiet, 1=info, 2=debug, 3=raw subprocess stderr). `True` is coerced to `1` and `False` to `0`.
      </ParamField>

      <ParamField path="device" type="string" default="cpu">
        Device to run the tool on.
      </ParamField>

      <ParamField path="timeout" type="integer" default="3600">
        Maximum execution time in seconds. `None` waits indefinitely.
      </ParamField>

      <ParamField path="seed" type="integer">
        Random seed. When set, tools run reproducibly up to small GPU float noise (see `BaseToolOutput.approx_equal`), and the seed participates in cache keys. When None, cacheable seed-sensitive tools skip cache until seeded.
      </ParamField>

      <ParamField path="gi_api_key" type="string">
        Bearer key for the hosted API. Defaults to the `GI_API_KEY` environment variable.
      </ParamField>

      <ParamField path="model" type="string">
        Model identifier. Leave unset: the service resolves the current default for the task.
      </ParamField>

      <ParamField path="respond_async" type="boolean" default="False">
        Request `202` + polling instead of a synchronous `200`. A per-request delivery choice available on every endpoint.
      </ParamField>

      <ParamField path="timeout_seconds" type="number" default="1800.0">
        Wall-clock cap on the async wait.
      </ParamField>
    </Accordion>
  </div>

  <div class="api-model-section api-output-section">
    <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_annotation.py#L159" 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>

    <Accordion title="Output: GIAnnotationOutput">
      <ResponseField name="results" type="List[GIAnnotationResult]" required>
        One result per submitted sequence, in the order submitted.

        <Expandable title="GIAnnotationResult">
          <ResponseField name="name" type="string" required>
            Label supplied with the sequence.
          </ResponseField>

          <ResponseField name="sequence_length" type="integer" required>
            Length of the submitted sequence in base pairs.
          </ResponseField>

          <ResponseField name="total_transcripts" type="integer" required>
            Number of transcripts found.
          </ResponseField>

          <ResponseField name="forward_strand" type="integer">
            Transcripts on the submitted orientation.
          </ResponseField>

          <ResponseField name="reverse_strand" type="integer">
            Transcripts on the opposite orientation.
          </ResponseField>

          <ResponseField name="transcripts" type="List[Transcript]">
            The transcripts found.
          </ResponseField>

          <ResponseField name="meta" type="GIRequestMeta" required>
            Provenance for the call.
          </ResponseField>
        </Expandable>
      </ResponseField>
    </Accordion>
  </div>

  #### Applications

  Use this to annotate assembled contigs or synthetic constructs where no reference annotation exists, and to supply TSS positions to `gi-expression` when they are not known in advance.

  #### Usage Tips

  * **Minimum input is 1,000 bp**, the highest floor apart from expression.
  * **Detection is strand-insensitive.** Genes on either strand are found from a single submission, and the reported `strand` is relative to the sequence as submitted.
  * **This is the slowest task.** Setting `respond_async` returns a job id and polls it, which avoids holding a long request open. That is a latency preference, not a requirement.

  <a name="api-run-gi-expression" />
</div>

<div class="tool-section-card">
  ### GI Gene Expression (`gi-expression`)

  Predicts expression as log(TPM+1) from a single 9,198 bp window centred on a transcription start site, conditioned on a free-text description of the experimental context.

  #### API Reference

  <div class="api-model-section api-input-section">
    <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_expression.py#L94" 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>

    <Accordion title="Input: GIExpressionInput">
      <ParamField path="sequences" type="List[ExpressionSequence]" required>
        Loci to score, each carrying its own TSS offset where needed.

        <Expandable title="ExpressionSequence">
          <ParamField path="sequence" type="string" required>
            Either exactly 9,198 bp centred on the TSS, or a longer locus paired with `tss_index`.
          </ParamField>

          <ParamField path="name" type="string" default="sequence">
            Label echoed back in the response.
          </ParamField>

          <ParamField path="tss_index" type="integer">
            0-based TSS offset into the whitespace-stripped sequence. Required unless the sequence is exactly 9,198 bp, where it defaults to the midpoint. Must satisfy `4599 <= tss_index <= len(sequence) - 4599`.
          </ParamField>
        </Expandable>
      </ParamField>
    </Accordion>
  </div>

  <div class="api-model-section api-config-section">
    <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_expression.py#L127" 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>

    <Accordion title="Config: GIExpressionConfig">
      <ParamField path="description" type="string" default="assay term name is polyA plus RNA-seq. biosample summary is Homo sapiens K562.">
        Experimental context the model is conditioned on — cell type, assay, conditions. Required. This is model input, not a
      </ParamField>

      <ParamField path="verbose" type="integer" default="0">
        Verbosity level (0=quiet, 1=info, 2=debug, 3=raw subprocess stderr). `True` is coerced to `1` and `False` to `0`.
      </ParamField>

      <ParamField path="device" type="string" default="cpu">
        Device to run the tool on.
      </ParamField>

      <ParamField path="timeout" type="integer" default="3600">
        Maximum execution time in seconds. `None` waits indefinitely.
      </ParamField>

      <ParamField path="seed" type="integer">
        Random seed. When set, tools run reproducibly up to small GPU float noise (see `BaseToolOutput.approx_equal`), and the seed participates in cache keys. When None, cacheable seed-sensitive tools skip cache until seeded.
      </ParamField>

      <ParamField path="gi_api_key" type="string">
        Bearer key for the hosted API. Defaults to the `GI_API_KEY` environment variable.
      </ParamField>

      <ParamField path="model" type="string">
        Model identifier. Leave unset: the service resolves the current default for the task.
      </ParamField>

      <ParamField path="respond_async" type="boolean" default="False">
        Request `202` + polling instead of a synchronous `200`. A per-request delivery choice available on every endpoint.
      </ParamField>

      <ParamField path="timeout_seconds" type="number" default="1800.0">
        Wall-clock cap on the async wait.
      </ParamField>
    </Accordion>
  </div>

  <div class="api-model-section api-output-section">
    <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_expression.py#L186" 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>

    <Accordion title="Output: GIExpressionOutput">
      <ResponseField name="results" type="List[ExpressionPrediction]" required>
        One result per submitted locus, in the order submitted.

        <Expandable title="ExpressionPrediction">
          <ResponseField name="name" type="string" required>
            Label supplied with the sequence.
          </ResponseField>

          <ResponseField name="sequence_length" type="integer" required>
            Length of the submitted sequence in base pairs, whitespace-stripped. Read from `meta`, not from `data.input`: the echo carries a field of the same name holding the 9,198 bp window instead, and only `meta` is in the published schema.
          </ResponseField>

          <ResponseField name="expression_log_tpm" type="number">
            Predicted log(TPM+1).
          </ResponseField>

          <ResponseField name="expression_tpm" type="number">
            Predicted TPM.
          </ResponseField>

          <ResponseField name="tss_index" type="integer">
            TSS offset the service applied.
          </ResponseField>

          <ResponseField name="scored_window" type="array">
            Window the service actually scored, as `[start, end)` in the submitted sequence.
          </ResponseField>

          <ResponseField name="meta" type="GIRequestMeta" required>
            Provenance for the call.
          </ResponseField>
        </Expandable>
      </ResponseField>
    </Accordion>
  </div>

  #### Applications

  Use this to estimate the transcriptional output of a locus or a designed promoter under a stated cellular context, and as the objective in an expression-maximizing or expression-matching design loop.

  #### Usage Tips

  * **The window is exact.** Submit exactly 9,198 bp centred on the TSS, or a longer locus plus `tss_index` and let the service cut it. Under-length input is rejected rather than padded.
  * **`description` is conditioning text, not a label.** It is fed to the model, so rewording it changes the prediction. Hold it fixed across runs you intend to compare.
  * **An in-range but wrong `tss_index` still scores.** It simply scores a different window, so the tool reads the applied window back from the response rather than assuming the request's.
  * **The sequence is never reverse-complemented.** Submit minus-strand genes in transcript orientation.

  <a name="api-run-gi-find-genes-and-predict-expression" />
</div>

<div class="tool-section-card tool-section-card--predict">
  ### GI Find Genes and Predict Expression (`gi-find-genes-and-predict-expression`)

  Runs annotation over a locus and then predicts expression for every gene found, centring each window on that gene's own TSS.

  #### API Reference

  <div class="api-model-section api-input-section">
    <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_find_genes_and_predict_expression.py#L50" 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>

    <Accordion title="Input: GIFindGenesInput">
      <ParamField path="sequences" type="List[GISequence]" required>
        Loci to process. A bare DNA string is accepted and coerced. Each must be at least 1,000 bp, the endpoint's published floor.

        <Expandable title="GISequence">
          <ParamField path="sequence" type="string" required>
            DNA sequence. Length bounds are per task and are checked against the endpoint's published values before any request.
          </ParamField>

          <ParamField path="name" type="string" default="sequence">
            Label echoed back in the response, useful for correlating results in a batch.
          </ParamField>
        </Expandable>
      </ParamField>
    </Accordion>
  </div>

  <div class="api-model-section api-config-section">
    <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_find_genes_and_predict_expression.py#L72" 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>

    <Accordion title="Config: GIFindGenesConfig">
      <ParamField path="description" type="string" default="assay term name is polyA plus RNA-seq. biosample summary is Homo sapiens K562.">
        Experimental context applied to every gene found. Conditioning text fed to the expression model, so its wording changes the predictions. The service requires it even though the published schema marks it optional.
      </ParamField>

      <ParamField path="annotation_model" type="string">
        Override the annotation stage's model. Leave unset.
      </ParamField>

      <ParamField path="expression_model" type="string">
        Override the expression stage's model. Leave unset.
      </ParamField>

      <ParamField path="verbose" type="integer" default="0">
        Verbosity level (0=quiet, 1=info, 2=debug, 3=raw subprocess stderr). `True` is coerced to `1` and `False` to `0`.
      </ParamField>

      <ParamField path="device" type="string" default="cpu">
        Device to run the tool on.
      </ParamField>

      <ParamField path="timeout" type="integer" default="3600">
        Maximum execution time in seconds. `None` waits indefinitely.
      </ParamField>

      <ParamField path="seed" type="integer">
        Random seed. When set, tools run reproducibly up to small GPU float noise (see `BaseToolOutput.approx_equal`), and the seed participates in cache keys. When None, cacheable seed-sensitive tools skip cache until seeded.
      </ParamField>

      <ParamField path="gi_api_key" type="string">
        Bearer key for the hosted API. Defaults to the `GI_API_KEY` environment variable.
      </ParamField>

      <ParamField path="model" type="string">
        Model identifier. Leave unset: the service resolves the current default for the task.
      </ParamField>

      <ParamField path="respond_async" type="boolean" default="False">
        Request `202` + polling instead of a synchronous `200`. A per-request delivery choice available on every endpoint.
      </ParamField>

      <ParamField path="timeout_seconds" type="number" default="1800.0">
        Wall-clock cap on the async wait.
      </ParamField>
    </Accordion>
  </div>

  <div class="api-model-section api-output-section">
    <a href="https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/gi_find_genes_and_predict_expression.py#L163" 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>

    <Accordion title="Output: GIFindGenesOutput">
      <ResponseField name="results" type="List[GIFindGenesResult]" required>
        One result per submitted locus, in the order submitted.

        <Expandable title="GIFindGenesResult">
          <ResponseField name="name" type="string" required>
            Label supplied with the sequence.
          </ResponseField>

          <ResponseField name="sequence_length" type="integer" required>
            Length of the submitted sequence in base pairs.
          </ResponseField>

          <ResponseField name="genes_found" type="integer" required>
            Genes the annotation stage reported.
          </ResponseField>

          <ResponseField name="genes_scored" type="integer" required>
            Genes expression was predicted for.
          </ResponseField>

          <ResponseField name="predictions" type="List[GenePrediction]">
            One record per gene found.
          </ResponseField>

          <ResponseField name="meta" type="GIRequestMeta" required>
            Provenance for the call.
          </ResponseField>
        </Expandable>
      </ResponseField>
    </Accordion>
  </div>

  #### Applications

  Use this when the TSS positions are not known in advance — annotating and scoring a whole locus in one call — rather than chaining `gi-annotation` into `gi-expression` yourself.

  #### Usage Tips

  * **Minimum input is 1,000 bp**, and the ceiling is the endpoint's own 500,000 bp, which is not the expression model's window.
  * **This is the only endpoint with a delivery rule.** A synchronous request above 50,000 bp is refused; the tool switches to polling automatically.
  * **Genes too close to a sequence boundary are skipped**, with the reason reported, because there is not enough flanking sequence for a full window.
  * **JSON only.** Unlike the predict endpoints, it declares no text output format.
</div>

## Toolkit Notes

These apply to every tool in this toolkit (`gi-promoter`, `gi-splice`, `gi-enhancer`, `gi-chromatin`, `gi-annotation`, `gi-expression`, `gi-find-genes-and-predict-expression`).

* **Requires network access and an API key.** Every tool calls the hosted Genomic Intelligence API. None runs offline, and no weights are downloaded. Set `GI_API_KEY`, or pass `gi_api_key` in the config; request a key at [genomicintelligence.ai](https://genomicintelligence.ai). The key is excluded from the cache key, so rotating it does not invalidate cached results.
* **No GPU is used.** Inference runs on the vendor's hardware, so these are CPU-local clients regardless of what is available on the host.
* **Every tool takes a list and returns one result per input, in order.** That is the shape a Constraint or Optimizer consumes when scoring a population. A bare DNA string is accepted in place of a list.
* **Length bounds are checked locally before any request.** Each task's floor comes from its own published request schema; every task caps at 500,000 bp.
* **Leave `model` unset.** The service resolves the current default per task, and pinning an identifier means a retired model fails hard. Enumerate the alternatives with `GET /v1/tasks/{task}/models`.
* **Errors carry a machine-readable code from a closed enum** plus a `request_id` for support. Branch on the code rather than the HTTP status.
* **A malformed 2xx is refused, not coerced.** A response that is well-formed HTTP but contradicts the published shape raises rather than parsing to zeros: a body that is not a `{data, meta}` envelope, or whose `data` is missing or empty, raises `GIAPIError` carrying the status and `request_id`; a field inside `data` that is documented as an object or an array and arrives as something else raises `GIResponseShapeError` naming that field. Absent and null members stay legitimate, since a task with nothing to report omits them.

<Tip>
  **Example notebook:** See the [full working example](https://github.com/evo-design/proto-tools/blob/55339880a8d5da4f1c7677518bcf90974a6365b7/proto_tools/tools/sequence_scoring/genomic_intelligence/examples/example.ipynb) for a copy-paste-ready walkthrough.
</Tip>

## Infrastructure Guides

The following guides cover how to run tools efficiently and at scale.

<CardGroup cols={2}>
  <Card title="Tool Persistence" icon="repeat" href="/docs/tools/guides/tool-persistence">Keep a tool's model warm across calls instead of reloading it every invocation.</Card>
  <Card title="Device Management" icon="cpu" href="/docs/tools/guides/device-management">How GPUs are allocated to tools and how to target specific devices.</Card>
  <Card title="Parallel Execution" icon="layers" href="/docs/tools/guides/parallel-execution">Fan a batch of inputs out across multiple GPUs.</Card>
</CardGroup>
