<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Therna Biosciences]]></title><description><![CDATA[Therna Biosciences]]></description><link>https://blog.therna.com</link><image><url>https://substackcdn.com/image/fetch/$s_!3yaY!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9625529-86f3-4606-8522-cd8ac417328a_1024x1024.png</url><title>Therna Biosciences</title><link>https://blog.therna.com</link></image><generator>Substack</generator><lastBuildDate>Sun, 20 Sep 2026 09:08:59 GMT</lastBuildDate><atom:link href="https://blog.therna.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Therna Biosciences]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[thernabio@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[thernabio@substack.com]]></itunes:email><itunes:name><![CDATA[Therna Biosciences]]></itunes:name></itunes:owner><itunes:author><![CDATA[Therna Biosciences]]></itunes:author><googleplay:owner><![CDATA[thernabio@substack.com]]></googleplay:owner><googleplay:email><![CDATA[thernabio@substack.com]]></googleplay:email><googleplay:author><![CDATA[Therna Biosciences]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Designing a glucagon mRNA for HepG2 with Proto]]></title><description><![CDATA[Here at Therna we build programmable RNA therapeutics.]]></description><link>https://blog.therna.com/p/designing-a-glucagon-mrna-for-hepg2</link><guid isPermaLink="false">https://blog.therna.com/p/designing-a-glucagon-mrna-for-hepg2</guid><dc:creator><![CDATA[Amir Momen-Roknabadi]]></dc:creator><pubDate>Wed, 12 Aug 2026 22:37:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Rg5G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c6b8843-1218-4d11-bb80-c0e4f0357f2c_1822x656.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Here at Therna we build programmable RNA therapeutics. We treat RNA as a language: something you can read, score, and rewrite. This post walks through designing a real mRNA end to end, and about the layer that makes composing models this way easy.</p><p></p><p><em><strong><span>Disclaimer:</span></strong><span> This walkthrough is provided for illustrative and educational purposes. Everything below deliberately runs on publicly available models, including Evo 2, PARADE, EnCodon, and ViennaRNA, so the entire workflow is reproducible by anyone who wants to run it. The construct is a computational example based on model predictions and has not been experimentally validated or developed as a therapeutic candidate.</span></em></p><p><em><span>At Therna, we apply the same primitives against our proprietary models trained on our own experimental data. Those models and data are not public. What we are sharing is the approach; the models, sequences, and results shown here do not reflect Therna&#8217;s production design platform.</span></em></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.therna.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h1><span>An mRNA is not one design problem</span></h1><p><span>Take glucagon. The GCG gene encodes a 180-amino-acid preproglucagon, and if you want to express it well in a particular tissue, say hepatocytes, you are really answering three questions at once. What 5&#8217;UTR drives strong translation in that cell type? What coding sequence does the ribosome prefer? What 3&#8217;UTR keeps the message stable? Each question is answered best by a different model, and the design you want is the one that satisfies all of them together.</span></p><p><span>There are already publicly available models that can do a good job of answering these questions. </span><a href="https://doi.org/10.1038/s41586-026-10176-5"><span>Evo 2,</span></a><span> from Arc Institute, reads DNA at genome scale and can generate regulatory sequences conditioned on real context. </span><a href="https://doi.org/10.1101/2024.12.31.630783"><span>PARADE</span></a><span>, also from Arc, scores UTR activity across a panel of human cell lines. </span><a href="https://research.nvidia.com/labs/dbr/assets/data/manuscripts/nv-codonfm-preprint.pdf"><span>EnCodon</span></a><span>, NVIDIA&#8217;s codon language model, has a learned, zero-shot opinion about what a well-formed coding sequence looks like. </span><a href="https://doi.org/10.1186/1748-7188-6-26"><span>ViennaRNA</span></a><span> computes folding energy from nearest-neighbor thermodynamics. Each is strong on its own axis. The question is how to bring them together under one design language when each has its own dependencies, interfaces, and conventions.</span></p><h1><span>The usual ways, and where they stop</span></h1><p><span>Classic codon optimization maximizes a single number, the codon adaptation index, against a fixed usage table. It is context-free, it says nothing about the UTRs, and it certainly cannot tune a sequence for one cell type over another. Vendor black boxes hand you a sequence and no readout of why. And the moment you try to combine several real models, each ships its own repository, CUDA pin, checkpoint format, and input convention. Getting a 7B genome model and a codon language model and a UTR activity model into one notebook is a week of dependency archaeology before any biology happens.</span></p><h1><span>Proto provides the orchestration layer</span></h1><p><span>Enter </span><a href="https://doi.org/10.64898/2026.06.22.733870"><span>Proto</span></a><span>. Proto is a programming language for generative biology. It is an open-source project from Brian Hie&#8217;s lab at Arc Institute and Stanford, and it makes one bet: biological design has the same shape as a program. You have objects, functions that score them, functions that propose them, and a search that ties the two together. Proto names those four things as primitives and lets you compose them, so designing a protein, a genome, or an mRNA becomes writing a short program rather than wiring bespoke scripts around each model. We were early adopters of the concepts behind Proto at Therna, and now that it is publicly released, I wanted to share some of my thoughts about the importance of adopting this design language.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Rg5G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c6b8843-1218-4d11-bb80-c0e4f0357f2c_1822x656.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Rg5G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c6b8843-1218-4d11-bb80-c0e4f0357f2c_1822x656.png 424w, https://substackcdn.com/image/fetch/$s_!Rg5G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c6b8843-1218-4d11-bb80-c0e4f0357f2c_1822x656.png 848w, https://substackcdn.com/image/fetch/$s_!Rg5G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c6b8843-1218-4d11-bb80-c0e4f0357f2c_1822x656.png 1272w, https://substackcdn.com/image/fetch/$s_!Rg5G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c6b8843-1218-4d11-bb80-c0e4f0357f2c_1822x656.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Rg5G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c6b8843-1218-4d11-bb80-c0e4f0357f2c_1822x656.png" width="1456" height="524" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c6b8843-1218-4d11-bb80-c0e4f0357f2c_1822x656.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:524,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1081431,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://blog.therna.com/i/210925285?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c6b8843-1218-4d11-bb80-c0e4f0357f2c_1822x656.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Rg5G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c6b8843-1218-4d11-bb80-c0e4f0357f2c_1822x656.png 424w, https://substackcdn.com/image/fetch/$s_!Rg5G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c6b8843-1218-4d11-bb80-c0e4f0357f2c_1822x656.png 848w, https://substackcdn.com/image/fetch/$s_!Rg5G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c6b8843-1218-4d11-bb80-c0e4f0357f2c_1822x656.png 1272w, https://substackcdn.com/image/fetch/$s_!Rg5G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c6b8843-1218-4d11-bb80-c0e4f0357f2c_1822x656.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Figure 1.</strong> Proto's four primitives, and what each one corresponds to in nature and in the lab. A Sequence is the object you design, a Constraint scores it, a Generator proposes new ones, and an Optimizer searches toward the constraints. The whole design in this post is written out of these four pieces.</figcaption></figure></div><p><span>The four primitives mirror how nature and the lab already work. A Sequence (x) is the object you design: DNA, RNA, or protein. A Constraint p(y|x) is a scoring function, a property you want the sequence to have; in nature it is resource competition, in the lab an assay, in Proto a model such as AlphaFold, Prodigal, a GC-content rule, or a binding or activity predictor. A Generator p(x) proposes sequences: nature&#8217;s random mutation, the lab&#8217;s random libraries, and in Proto a generative model such as Evo 2, ProteinMPNN, or uniform sampling. An Optimizer p(x|y) searches toward the constraints: nature&#8217;s evolution by selection, the lab&#8217;s directed evolution, and in Proto MCMC or gradient descent.</span></p><p><span>You write a design by connecting generators to the sequences they sample and constraints to the sequences they score, then letting an optimizer iterate: the generator produces a sequence, the constraint scores it, and the optimizer guides the next proposal until the energy settles. The same program is reachable from a graphical interface, a software API, or an AI agent, so the loop is identical whether a person or a model is driving it. It is the shift from traditional biological programming, rule-based heuristics and trial-and-error over parts pulled from nature, to generative biological programming, where you state high-level constraints like symmetry, globularity, or stability and let generative models compile them into sequence.</span></p><h2><span>Proto Tools</span></h2><p><code>proto_tools</code><span> is the open-source implementation of these primitives, and every model wired into it is public: Evo 2, ProteinMPNN, AlphaFold, ViennaRNA, and NVIDIA&#8217;s EnCodon among them. At Therna, we use the same primitives with our proprietary models. For this demonstration, I will use only publicly available models.</span></p><p><span>Every model is a tool with the same shape: an Input, a Config, an Output, and a run_ function. Each runs in its own isolated environment, so the dependency conflicts that used to make this painful simply do not occur. Checkpoints resolve on first use, and a persistent worker keeps a model warm across a loop so you are not reloading it every iteration.</span></p><p><span>In practice the whole stack is one import:</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;9d5bc081-264d-4b97-9060-bb991deaa38a&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">from proto_tools import (
run_evo2_sample,
    run_evo2_score,                           # Evo 2, genome-scale DNA model
    run_parade_activity,                      # PARADE, UTR activity
    run_codonfm_score,
    run_codonfm_fitness,                      # EnCodon, codon language model
    run_viennarna,                            # ViennaRNA, RNA folding
)
</code></pre></div><p><span>The recipe is the same at every stage: Evo2 proposes, PARADE (or EnCodon) selects. We carry 20 candidate constructs the whole way through and keep the best.</span></p><h1><span>Setting up the environment:</span></h1><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;70d45e8a-bf68-4f3b-a798-cc3ff200ce3c&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import logging
import os
 
os.environ["PROTO_NO_SPINNER"] = "1"
os.environ["PYTORCH_CUDA_ALLOC_CONF"] = "expandable_segments:True"   # ease Evo2 long-context prefill
logging.getLogger("proto_tools.utils.progress").setLevel(logging.WARNING)
 
DEVICE = "cuda"
PARADE_DEVICE = "cpu"            # small LegNet; matches GPU exactly and frees the GPU for Evo2
EnCodon = "encodon_80m"
EVO2 = "evo2_7b"
HEPG2 = "c2"                     # PARADE cell code for HepG2
 
N_CAND = 20                     # candidate lineages
N5, UTR5_LEN = 50, 50           # 5'UTR: tries per candidate, length
T5, K5, BS5 = 1.0, 4, 100       # 5'UTR Evo2 sampling (short context -&gt; naturally diverse)
BLOCKS = [50, 50, 50, 50, 40]   # 3'UTR grown in 50 nt blocks to 240 nt
N3 = 50                         # 3'UTR tries per candidate per block
T3, K3, BS3 = 1.5, 32, 8        # 3'UTR Evo2 sampling (long context -&gt; raise temp/top_k for diversity)
CELL_NAMES = {"c2": "HepG2"}  # HepG2 is c2; add the rest here to relabel the panels
 
import numpy as np
from proto_tools import (
    CodonFMFitnessInput, CodonFMFitnessConfig, run_codonfm_fitness,
    CodonFMScoreInput, CodonFMScoreConfig, CodonFMMutation, run_codonfm_score,
    Evo2SampleInput, Evo2SampleConfig, run_evo2_sample,
    Evo2ScoringInput, Evo2ScoringConfig, run_evo2_score,
    ParadeActivityInput, ParadeActivityConfig, run_parade_activity,
    ParadeStabilityInput, ParadeStabilityConfig, run_parade_stability,
    ViennaRNAInput, ViennaRNAConfig, run_viennarna,
)
from proto_tools.utils.tool_instance import ToolInstance
print("proto tools ready: Evo2 (sample + score), EnCodon, PARADE (activity + stability), ViennaRNA")
</code></pre></div><h1><span>The target &#8212; human glucagon, RefSeq NM_002054</span></h1><p><span>The reference GCG sequence is split into its components below. For a length-matched comparison, we use the final 50 nt of the native 99-nt 5&#8242;UTR. The 50 bp genomic sequence immediately upstream of the transcript, which contains the TATA box, is used only as context for Evo 2 and is not part of the resulting mRNA.</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;3aa47978-a547-4eb1-a208-66144756c99d&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">from itertools import product
 
_BASES = "TCAG"
_AAS = "FFLLSSSSYY**CC*WLLLLPPPPHHQQRRRRIIIMTTTTNNKKSSRRVVVVAAAADDEEGGGG"
CODE = {a + b + c: aa for (a, b, c), aa in zip(product(_BASES, repeat=3), _AAS)}
SYNONYMS = {}
for _c, _aa in CODE.items():
    SYNONYMS.setdefault(_aa, []).append(_c)
def translate(cds): return "".join(CODE[cds[i : i + 3]] for i in range(0, len(cds), 3))
 
PROMOTER_50 = "CTAAACAGAGCTGGAGAGTATATAAAAGCAGTGCGCCTTGGTGCAGAAGT"
NAT5 = "ACAGAGCTTAGGACACAGAGCACATCAAAAGTTCCCAAAGAGGGCTTGCTCTCTCTTCACCTGCTCTGTTCTACAGCACACTACCAGAAGACAGCAGAA"
NAT5_50 = NAT5[-50:]
CDS = "ATGAAAAGCATTTACTTTGTGGCTGGATTATTTGTAATGCTGGTACAAGGCAGCTGGCAACGTTCCCTTCAAGACACAGAGGAGAAATCCAGATCATTCTCAGCTTCCCAGGCAGACCCACTCAGTGATCCTGATCAGATGAACGAGGACAAGCGCCATTCACAGGGCACATTCACCAGTGACTACAGCAAGTATCTGGACTCCAGGCGTGCCCAAGATTTTGTGCAGTGGTTGATGAATACCAAGAGGAACAGGAATAACATTGCCAAACGTCACGATGAATTTGAGAGACATGCTGAAGGGACCTTTACCAGTGATGTAAGTTCTTATTTGGAAGGCCAAGCTGCCAAGGAATTCATTGCTTGGCTGGTGAAAGGCCGAGGAAGGCGAGATTTCCCAGAAGAGGTCGCCATTGTTGAAGAACTTGGCCGCAGACATGCTGATGGTTCTTTCTCTGATGAGATGAACACCATTCTTGATAATCTTGCCGCCAGGGACTTTATAAACTGGTTGATTCAGACCAAAATCACTGACAGGAAATAA"
UTR3 = "CTATATCACTATTCAAGATCATCTTCACAACATCACCTGCTAGCCACGTGGGATGTTTGAAATGTTAAGTCCTGTAAATTTAAGAGGTGTATTCTGAGGCCACATTGCTTTGCATGCCAATAAATAAATTTTCTTTTAGTGTTGTGTAGCCAAAAATTACAAATGGAATAAAGTTTTATCAAAATATTGCTAAAATATCAGCTTTAAAATATGAAAGTGCTAGATTCTGTTATTTTCTTC"
PROTEIN = translate(CDS)
print(f"promoter {len(PROMOTER_50)} bp | natural 5'UTR {len(NAT5)} nt (use {len(NAT5_50)}) | "
      f"CDS {len(CDS)} nt = {len(CDS)//3} codons | natural 3'UTR {len(UTR3)} nt")
print(f"preproglucagon ({len(PROTEIN)} aa): {PROTEIN}")
</code></pre></div><h1><span>Every model, one interface</span></h1><p><span>Each tool available and returning its primary metric on the real GCG parts. The first Evo2 call loads the 7B checkpoint; later calls reuse the warm worker.</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;23205731-745e-47ed-8c93-a436782d9049&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">rows = []
e = run_evo2_score(Evo2ScoringInput(sequences=[CDS[:60]]), Evo2ScoringConfig(model_checkpoint=EVO2, device=DEVICE))
rows.append(("Evo2", EVO2, "perplexity", round(e.scores[0]["perplexity"], 3)))
f = run_codonfm_fitness(CodonFMFitnessInput(sequences=[CDS]), CodonFMFitnessConfig(model_checkpoint=ENCODON, device=DEVICE))
rows.append(("EnCodon", EnCodon, "fitness", round(f.results[0].fitness, 3)))
a = run_parade_activity(ParadeActivityInput(sequences=[NAT5_50]), ParadeActivityConfig(construct_type="utr5", device=PARADE_DEVICE))
rows.append(("PARADE activity", "utr5/c2", "HepG2 activity", round(a.results[0].scores[HEPG2], 3)))
s = run_parade_stability(ParadeStabilityInput(sequences=[UTR3]), ParadeStabilityConfig(device=PARADE_DEVICE))
rows.append(("PARADE stability", "stability", "log_ratio", round(s.results[0].log_ratio, 3)))
v = run_viennarna(ViennaRNAInput(sequences=[CDS]), ViennaRNAConfig(temperature=37.0))
rows.append(("ViennaRNA", "-", "MFE (kcal/mol)", round(v.results[0].mfe, 3)))
print(f"{'tool':&lt;18}{'checkpoint':&lt;12}{'metric':&lt;18}{'value':&gt;10}")
for n, c, m, val in rows:
    print(f"{n:&lt;18}{c:&lt;12}{m:&lt;18}{val:&gt;10}")
</code></pre></div><h1><span>Generation and scoring helpers</span></h1><p><span>Thin wrappers: Evo 2 samples fixed-length continuations, while PARADE scores predicted HepG2 activity for either 5&#8242;UTRs or 3&#8242;UTRs.</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;ca0b8528-ffa3-4394-9e95-ff58e76971d8&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">def valid(seq, n):
    # Evo2's byte vocab can emit IUPAC ambiguity codes (M, R, N, ...) especially at higher top_k;
    # PARADE and the codon logic need strict A/C/G/T at the exact length.
    return len(seq) == n and set(seq) &lt;= set("ACGT")
 
def evo2_generate(prompts, n_new, temperature, top_k, batch_size):
    out = run_evo2_sample(
        Evo2SampleInput(prompts=list(prompts)),
        Evo2SampleConfig(model_checkpoint=EVO2, device=DEVICE, max_new_tokens=n_new,
                         temperature=temperature, top_k=top_k, prepend_prompt=False,
                         stop_at_eos=False, batch_size=batch_size))
    return out.sequences
 
def parade_activity_panel(utr5s):
    a = run_parade_activity(ParadeActivityInput(sequences=list(utr5s)),
                            ParadeActivityConfig(construct_type="utr5", device=PARADE_DEVICE, batch_size=128))
    cells = a.cell_types
    mat = np.array([[r.scores[c] for c in cells] for r in a.results])
    return mat, cells
 
def parade_utr3_panel(utr3s):
    # 3'UTR measured exactly like the 5'UTR: PARADE activity, read c2 (HepG2). The activity tool
    # returns the mass-center column; construct_type="utr3" selects the 3'UTR model and cell panel.
    a = run_parade_activity(ParadeActivityInput(sequences=list(utr3s)),
                            ParadeActivityConfig(construct_type="utr3", device=PARADE_DEVICE, batch_size=128))
    cells = a.cell_types
    mat = np.array([[r.scores[c] for c in cells] for r in a.results])
    return mat, cells
</code></pre></div><h1><span>Step 1: design the 5&#8217;UTR by generate-and-select</span></h1><p><span>To optimize GCG to be highly expressed in the liver, we start from the 5&#8217; UTR. We also will start with 20 candidates to increase the chance of success. We use Evo2 as the generator in Proto. Since Evo2 is an autoregressive model, we need to have a sequence already present on the 5&#8217; side to start the generation. Therefore, each of the 20 candidates is seeded with the real 50 base pairs of genomic sequence immediately upstream of the GCG transcript, which carries the promoter&#8217;s TATA box, so Evo2 generates in a realistic context. For every candidate, Evo2 generates 50 full 50-nucleotide UTRs, and PARADE scores all of them for HepG2 activity. Each candidate keeps its best.</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;c258ed30-a9f7-47f0-8e43-18fe82b1a768&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">pool_c2 = []
with ToolInstance.persist():
    NAT_PANEL, cells = parade_activity_panel([NAT5_50])
    c2_idx = cells.index(HEPG2)
    DESIGNED_UTR5, UTR5_PANEL = [], []
    for c in range(N_CAND):
        seqs = []
        while not seqs:                                   # keep only strict-ACGT 50-mers
            seqs = [s for s in evo2_generate([PROMOTER_50] * N5, UTR5_LEN, T5, K5, BS5) if valid(s, UTR5_LEN)]
        mat, _ = parade_activity_panel(seqs)
        c2 = mat[:, c2_idx]; pool_c2.extend(c2.tolist())
        j = int(np.argmax(c2))
        DESIGNED_UTR5.append(seqs[j]); UTR5_PANEL.append(mat[j])
    UTR5_PANEL = np.array(UTR5_PANEL)
 
pool_c2 = np.array(pool_c2)
sel_c2 = UTR5_PANEL[:, c2_idx]
print(f"generated ~{N_CAND * N5} 5'UTRs, kept the best per candidate ({N_CAND})")
print(f"HepG2 c2: selected best {sel_c2.max():.3f}  median {np.median(sel_c2):.3f}  "
      f"pool median {np.median(pool_c2):.3f}  natural {NAT_PANEL[0, c2_idx]:.3f}")
best5 = int(np.argmax(sel_c2))
print(f"top 5'UTR (candidate {best5}): {DESIGNED_UTR5[best5]}")
</code></pre></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6eQe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b3fbe18-0c2d-4fc9-957f-ca9e605ace06_1589x453.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6eQe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b3fbe18-0c2d-4fc9-957f-ca9e605ace06_1589x453.png 424w, https://substackcdn.com/image/fetch/$s_!6eQe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b3fbe18-0c2d-4fc9-957f-ca9e605ace06_1589x453.png 848w, https://substackcdn.com/image/fetch/$s_!6eQe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b3fbe18-0c2d-4fc9-957f-ca9e605ace06_1589x453.png 1272w, https://substackcdn.com/image/fetch/$s_!6eQe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b3fbe18-0c2d-4fc9-957f-ca9e605ace06_1589x453.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6eQe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b3fbe18-0c2d-4fc9-957f-ca9e605ace06_1589x453.png" width="728" height="207.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b3fbe18-0c2d-4fc9-957f-ca9e605ace06_1589x453.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:415,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6eQe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b3fbe18-0c2d-4fc9-957f-ca9e605ace06_1589x453.png 424w, https://substackcdn.com/image/fetch/$s_!6eQe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b3fbe18-0c2d-4fc9-957f-ca9e605ace06_1589x453.png 848w, https://substackcdn.com/image/fetch/$s_!6eQe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b3fbe18-0c2d-4fc9-957f-ca9e605ace06_1589x453.png 1272w, https://substackcdn.com/image/fetch/$s_!6eQe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b3fbe18-0c2d-4fc9-957f-ca9e605ace06_1589x453.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption"><strong>Figure 2. </strong><em>Across 1000 generated 5&#8217;UTRs, the 20 selected land at a median HepG2 activity of 2.63 and a best of 2.68, with 2.60 for the length-matched 50-nt segment of the native GCG 5&#8242;UTR. The predicted gain is real but modest. The top 5&#8217;UTR is a natural-looking sequence, not the low-complexity string a greedy per-base search tends to converge on.</em></figcaption></figure></div><h1><span>Step 2: decode the coding sequence by iterative unmasking with EnCodon</span></h1><p><span>For the coding sequence I let EnCodon decode it, </span><strong><span>once</span></strong><span>, shared across all candidates. Every one of the 180 codons and the stope codon start provisional, and the sequence is filled in confidence order. Each round, EnCodon scores every synonymous option at every open position in the current context, I commit the most confident quarter to EnCodon&#8217;s preferred codon, and then re-score the rest. Only synonymous codons are ever chosen, so the protein is fixed while the codons are rewritten. Because EnCodon is bidirectional, committing one codon changes the scores of its neighbors, which is the point of decoding in rounds rather than one pass.</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;9c2e30e0-d2e8-43c4-9e50-11a696365675&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import math
 
HUMAN_W = {"AAA": 0.378, "AAC": 1.0, "AAG": 1.0, "AAT": 0.5128, "ACA": 0.3571, "ACC": 1.0, "ACG": 0.1071, "ACT": 0.5714, "AGA": 0.3571, "AGC": 0.8409, "AGG": 0.4524, "AGT": 0.2727, "ATA": 0.0246, "ATC": 1.0, "ATG": 1.0, "ATT": 0.4672, "CAA": 0.0732, "CAC": 1.0, "CAG": 1.0, "CAT": 0.7, "CCA": 0.5185, "CCC": 1.0, "CCG": 0.0741, "CCT": 0.7778, "CGA": 0.4524, "CGC": 1.0, "CGG": 0.5952, "CGT": 0.881, "CTA": 0.1028, "CTC": 0.5607, "CTG": 1.0, "CTT": 0.1308, "GAA": 0.4154, "GAC": 1.0, "GAG": 1.0, "GAT": 0.7447, "GCA": 0.2051, "GCC": 1.0, "GCG": 0.1282, "GCT": 0.8034, "GGA": 0.2857, "GGC": 1.0, "GGG": 0.4107, "GGT": 0.4821, "GTA": 0.1171, "GTC": 0.7207, "GTG": 1.0, "GTT": 0.3333, "TAC": 1.0, "TAT": 0.431, "TCA": 0.2727, "TCC": 1.0, "TCG": 0.1818, "TCT": 0.9545, "TGC": 1.0, "TGG": 1.0, "TGT": 0.4286, "TTA": 0.0187, "TTC": 1.0, "TTG": 0.1963, "TTT": 0.5}
 
def cai(cds):
    lp = []
    for i in range(0, len(cds) - 2, 3):
        c = cds[i:i+3]; aa = CODE.get(c, "*")
        if aa in ("*", "M", "W"): continue
        lp.append(math.log(max(HUMAN_W.get(c, 1e-3), 1e-3)))
    return math.exp(sum(lp) / len(lp)) if lp else float("nan")
 
def mfe(s): return run_viennarna(ViennaRNAInput(sequences=[s]), ViennaRNAConfig(temperature=37.0)).results[0].mfe
def encodon_fitness(cds): return run_codonfm_fitness(CodonFMFitnessInput(sequences=[cds]), CodonFMFitnessConfig(model_checkpoint=ENCODON, device=DEVICE)).results[0].fitness
def evo2_ppl(seq): return run_evo2_score(Evo2ScoringInput(sequences=[seq]), Evo2ScoringConfig(model_checkpoint=EVO2, device=DEVICE)).scores[0]["perplexity"]
def measure_cds(cds): return {"EnCodon fitness": encodon_fitness(cds), "CAI": cai(cds), "MFE": mfe(cds)}
 
def best_synonymous(cds, positions):
    cur = [cds[i:i+3] for i in range(0, len(cds), 3)]
    muts, meta = [], []
    for pos in positions:
        c = cur[pos-1]
        for alt in SYNONYMS[CODE[c]]:
            if alt != c:
                muts.append(CodonFMMutation(sequence=cds, codon_position=pos, ref_codon=c, alt_codon=alt)); meta.append((pos, alt))
    res = run_codonfm_score(CodonFMScoreInput(mutations=muts),
                            CodonFMScoreConfig(model_checkpoint=ENCODON, device=DEVICE, batch_size=64)).results
    agg = {}
    for (pos, alt), r in zip(meta, res):
        d = agg.setdefault(pos, {"opts": [(cur[pos-1], r.ref_log_likelihood)]})
        d["opts"].append((alt, r.alt_log_likelihood))
    out = {}
    for pos, d in agg.items():
        opts = sorted(set(d["opts"]), key=lambda t: -t[1])
        best, second = opts[0][1], (opts[1][1] if len(opts) &gt; 1 else opts[0][1] - 10)
        out[pos] = {"best": opts[0][0], "conf": best - second}
    return out
 
codons0 = [CDS[i:i+3] for i in range(0, len(CDS), 3)]
openable = [p for p, c in enumerate(codons0, 1) if CODE[c] != "*" and len(SYNONYMS[CODE[c]]) &gt; 1]
working, locked, cds_history = list(codons0), set(), []
with ToolInstance.persist():
    row = measure_cds(CDS); row.update(round=0, locked=0); cds_history.append(row)
    print(f"round  0 (natural): fitness {row['EnCodon fitness']:.4f}  CAI {row['CAI']:.3f}  MFE {row['MFE']:.1f}")
    rnd = 0
    while len(locked) &lt; len(openable):
        rnd += 1
        remaining = [p for p in openable if p not in locked]
        info = best_synonymous("".join(working), remaining)
        for p in sorted(remaining, key=lambda p: -info[p]["conf"])[:max(1, math.ceil(len(remaining) * 0.25))]:
            working[p-1] = info[p]["best"]; locked.add(p)
        row = measure_cds("".join(working)); row.update(round=rnd, locked=len(locked)); cds_history.append(row)
        print(f"round {rnd:&gt;2}: locked {len(locked):&gt;3}/{len(openable)}  fitness {row['EnCodon fitness']:.4f}  CAI {row['CAI']:.3f}  MFE {row['MFE']:.1f}")
 
DESIGNED_CDS = "".join(working)
assert translate(DESIGNED_CDS) == PROTEIN
with ToolInstance.persist():
    EVO2_PPL_NAT, EVO2_PPL_OPT = evo2_ppl(CDS), evo2_ppl(DESIGNED_CDS)
n_changed = sum(a != b for a, b in zip(codons0, working))
print(f"\nEvo2 perplexity  natural {EVO2_PPL_NAT:.3f} -&gt; designed {EVO2_PPL_OPT:.3f}")
print(f"{n_changed}/{len(codons0)} codons rewritten over {rnd} rounds; protein identical: {translate(DESIGNED_CDS) == PROTEIN}")
 
</code></pre></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jmFN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2844680-6d4f-4921-8faa-c3e8df696ca6_1389x417.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jmFN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2844680-6d4f-4921-8faa-c3e8df696ca6_1389x417.png 424w, https://substackcdn.com/image/fetch/$s_!jmFN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2844680-6d4f-4921-8faa-c3e8df696ca6_1389x417.png 848w, https://substackcdn.com/image/fetch/$s_!jmFN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2844680-6d4f-4921-8faa-c3e8df696ca6_1389x417.png 1272w, https://substackcdn.com/image/fetch/$s_!jmFN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2844680-6d4f-4921-8faa-c3e8df696ca6_1389x417.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jmFN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2844680-6d4f-4921-8faa-c3e8df696ca6_1389x417.png" width="1389" height="417" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a2844680-6d4f-4921-8faa-c3e8df696ca6_1389x417.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:417,&quot;width&quot;:1389,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jmFN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2844680-6d4f-4921-8faa-c3e8df696ca6_1389x417.png 424w, https://substackcdn.com/image/fetch/$s_!jmFN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2844680-6d4f-4921-8faa-c3e8df696ca6_1389x417.png 848w, https://substackcdn.com/image/fetch/$s_!jmFN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2844680-6d4f-4921-8faa-c3e8df696ca6_1389x417.png 1272w, https://substackcdn.com/image/fetch/$s_!jmFN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2844680-6d4f-4921-8faa-c3e8df696ca6_1389x417.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Figure 3. </strong><em>Over 16 rounds the decoder rewrote 87 of the 180 codons. EnCodon fitness rose from -0.67 to -0.51, CAI climbed with it from 0.55 to 0.82, and the folding energy fell from -149 to -210 kcal/mol. Three signals moving together, one of them a table EnCodon was never shown.</em></figcaption></figure></div><p></p><p><span>Evo2, though, went the other way. Its perplexity on the coding sequence rose from 1.55 to 1.71, meaning the codon-optimized sequence looks less like natural genomic DNA to the genome-scale model even as it looks better to the codon model. That is not a bug, it is the point. Evo 2 was trained on natural genomic sequences, so the native human CDS is closer to its training distribution than a heavily rewritten synonymous sequence. In this example, improving the EnCodon objective made the CDS less probable under Evo 2. Composing the two models exposes that trade-off instead of optimizing one proxy in isolation.</span></p><h1><span>Step 3: grow the 3&#8217;UTR in blocks</span></h1><p><span>The 3&#8217;UTR is built 50 nucleotides at a time, out to 240, and scored exactly like the 5&#8217;UTR: PARADE activity for HepG2. At each block, for each candidate, Evo2 extends the real promoter + 5&#8217;UTR + CDS + 3&#8217;-so-far context by 50 nucleotides, 50 tries, and PARADE scores each partial 3&#8217;UTR by its HepG2 activity. Each candidate keeps its best extension, then moves to the next block. Nothing is ever padded with filler; the model always continues the complete synthetic construct assembled so far.</span></p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;413b3cc7-b1aa-4f2b-a3a7-7f243934ff5a&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">cand3, act_trace = ["" for _ in range(N_CAND)], []
# One persist() PER block: the warm Evo2 worker accumulates GPU memory across many long-context
# calls, so we reset it between blocks (a fresh worker each block) to avoid an out-of-memory at
# the longest context. The per-block reload is a few seconds.
for blk in BLOCKS:
    with ToolInstance.persist():
        best_row = []
        for c in range(N_CAND):
            ctx = PROMOTER_50 + DESIGNED_UTR5[c] + DESIGNED_CDS + cand3[c]
            exts = []
            while not exts:                                            # keep only strict-ACGT extensions
                exts = [e for e in evo2_generate([ctx] * N3, blk, T3, K3, BS3) if valid(e, blk)]
            opts = [cand3[c] + e for e in exts]
            mat, cells3 = parade_utr3_panel(opts)
            sc = mat[:, cells3.index(HEPG2)]                           # HepG2 (c2) activity, exactly like the 5'UTR
            j = int(np.argmax(sc))
            cand3[c] = opts[j]; best_row.append(float(sc[j]))
    act_trace.append(best_row)
    print(f"3'UTR {len(cand3[0]):&gt;3} nt: best HepG2 {max(best_row):.4f}  median {np.median(best_row):.4f}")
 
with ToolInstance.persist():
    m3, cells3 = parade_utr3_panel(cand3); c2i3 = cells3.index(HEPG2)
    UTR3_C2 = m3[:, c2i3]
    mN, _ = parade_utr3_panel([UTR3]); UTR3_C2_NAT = float(mN[0, c2i3])
 
DESIGNED_UTR3 = cand3
best3 = int(np.argmax(UTR3_C2))
print(f"\n{N_CAND} 3'UTRs at {len(DESIGNED_UTR3[0])} nt | HepG2 best {UTR3_C2.max():.3f}  median {np.median(UTR3_C2):.3f}  natural {UTR3_C2_NAT:.3f}")
</code></pre></div><p><strong><span>Figure 3. </span></strong><em><span>HepG2 activity climbs block by block, the 20 designed 3&#8217;UTRs reaching a median of 3.12 and a best of 3.35, against 2.87 for the natural GCG 3&#8217;UTR. All 20 beat it, and the gain here, about 15%, is larger than at the 5&#8217; end.</span></em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YLXm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8bc17ae-12e3-4d15-97ac-9d5e14477eae_1189x453.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YLXm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8bc17ae-12e3-4d15-97ac-9d5e14477eae_1189x453.png 424w, https://substackcdn.com/image/fetch/$s_!YLXm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8bc17ae-12e3-4d15-97ac-9d5e14477eae_1189x453.png 848w, https://substackcdn.com/image/fetch/$s_!YLXm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8bc17ae-12e3-4d15-97ac-9d5e14477eae_1189x453.png 1272w, https://substackcdn.com/image/fetch/$s_!YLXm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8bc17ae-12e3-4d15-97ac-9d5e14477eae_1189x453.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YLXm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8bc17ae-12e3-4d15-97ac-9d5e14477eae_1189x453.png" width="1189" height="453" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8bc17ae-12e3-4d15-97ac-9d5e14477eae_1189x453.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:453,&quot;width&quot;:1189,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YLXm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8bc17ae-12e3-4d15-97ac-9d5e14477eae_1189x453.png 424w, https://substackcdn.com/image/fetch/$s_!YLXm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8bc17ae-12e3-4d15-97ac-9d5e14477eae_1189x453.png 848w, https://substackcdn.com/image/fetch/$s_!YLXm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8bc17ae-12e3-4d15-97ac-9d5e14477eae_1189x453.png 1272w, https://substackcdn.com/image/fetch/$s_!YLXm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8bc17ae-12e3-4d15-97ac-9d5e14477eae_1189x453.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Figure 4.</strong> HepG2 activity climbs block by block as the 3'UTR is extended to 240 nucleotides. The 20 designed 3'UTRs reach a median of 3.12 and a best of 3.35, against 2.87 for the natural GCG 3'UTR. All 20 beat it, and the gain here, about 15 percent, is larger than at the 5' end.</figcaption></figure></div><h1><span>The finished construct</span></h1><p><span>Each candidate is a full construct, its own 5&#8217;UTR joined to the shared coding sequence and its own 3&#8217;UTR. Because we tracked HepG2 activity at both ends, we can rank the twenty by a combined score and take the winner, then compare it with a length-matched GCG reference construct on every axis at once. Both constructs encode the same 180-amino-acid protein and contain 833 nucleotides across the 5&#8242;UTR, CDS, and 3&#8242;UTR, and every regulatory and coding choice rewritten by a different model. The table and the final figure are just those numbers side by side; what matters is that they came out of one loop, not four.</span></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CEcv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06fe46e-94a5-4f03-86da-709fbf940c6b_889x430.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CEcv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06fe46e-94a5-4f03-86da-709fbf940c6b_889x430.png 424w, https://substackcdn.com/image/fetch/$s_!CEcv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06fe46e-94a5-4f03-86da-709fbf940c6b_889x430.png 848w, https://substackcdn.com/image/fetch/$s_!CEcv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06fe46e-94a5-4f03-86da-709fbf940c6b_889x430.png 1272w, https://substackcdn.com/image/fetch/$s_!CEcv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06fe46e-94a5-4f03-86da-709fbf940c6b_889x430.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CEcv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06fe46e-94a5-4f03-86da-709fbf940c6b_889x430.png" width="889" height="430" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c06fe46e-94a5-4f03-86da-709fbf940c6b_889x430.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:430,&quot;width&quot;:889,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CEcv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06fe46e-94a5-4f03-86da-709fbf940c6b_889x430.png 424w, https://substackcdn.com/image/fetch/$s_!CEcv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06fe46e-94a5-4f03-86da-709fbf940c6b_889x430.png 848w, https://substackcdn.com/image/fetch/$s_!CEcv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06fe46e-94a5-4f03-86da-709fbf940c6b_889x430.png 1272w, https://substackcdn.com/image/fetch/$s_!CEcv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc06fe46e-94a5-4f03-86da-709fbf940c6b_889x430.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Figure 5. </strong><em>The finished 833-nucleotide construct encodes the identical 180-amino-acid protein. Against the length-matched GCG reference construct it gains about 3% in HepG2 5&#8217;UTR activity, 14% in HepG2 3&#8217;UTR activity, 48% in CAI, and a much deeper folding energy, with EnCodon fitness up and Evo2 perplexity the one metric that moved against us. A single view of the design across four model systems and a classical codon-usage metric, all accessed through the same interface.</em></figcaption></figure></div><p></p><h1><span>Why this is the easier way</span></h1><p><span>None of these models are new. What was missing was a way to hold them in one hand. The old path to this notebook was four environments, four checkpoint formats, four input conventions, and a lot of careful reloading. The proto path is one import, one call shape, and warm workers that let a 7B genome model generate both UTRs and a codon language model decode a coding sequence in the same session, without any glue between them. That is the point. When composing models is cheap, you can stop designing against a single proxy and begin evaluating each sequence against multiple relevant objectives for the cellular context you care about.</span></p><p><span>That is the point. When composing models is cheap, you stop designing against a single proxy and start designing against everything you know at once, for the cell you actually care about.</span></p><h1><span>Where this goes</span></h1><p><span>This is the design half of our lab in the loop. The models propose, the bench decides. A sequence that scores well across several computational objectives is a hypothesis, not a drug. The interesting next step, as always, is the wet lab.</span></p>]]></content:encoded></item><item><title><![CDATA[In-Context Learning with Evo2 for RNA Design]]></title><description><![CDATA[Here at Therna we are building programmable RNA therapeutics.]]></description><link>https://blog.therna.com/p/in-context-learning-with-evo2-for</link><guid isPermaLink="false">https://blog.therna.com/p/in-context-learning-with-evo2-for</guid><dc:creator><![CDATA[Amir Momen-Roknabadi]]></dc:creator><pubDate>Wed, 10 Jun 2026 16:33:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9h3f!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5018a4-4150-47fd-b7a7-5c86652e9e57_1164x466.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Here at Therna we are building programmable RNA therapeutics. We run a Lab in the Loop where our internal models propose RNA sequences, the bench validates them, and the resulting data goes back into the next round of training. The models get refined, and the next design batch gets better.</p><p>An in-silico version of this loop leans on two kinds of models doing two different jobs. A generator proposes new sequences, and a predictor scores them. These are usually separate models. The Evo2 paper is a good example, using Evo2 to generate DNA and a predictor like Borzoi to guide it.</p><p>I got curious whether in context learning could collapse that split. If I show a foundation model a handful of high activity sequences and ask it for one more, will it return something that also looks high activity? No fine tuning, no numeric labels, just a list of &#8220;preferred&#8221; sequences in the prompt. If it works, the generator is doing the predictor&#8217;s job on its own, inferring &#8220;what success looks like&#8221; from the examples alone.</p><p>To test this I needed two kinds of models.</p><ol><li><p>As the generator I tried two foundation models. Evo2, the long context DNA language model from the Arc Institute, is trained on a broad slice of natural genomes and transcriptomes; I used the seven billion parameter checkpoint. EVA is a recent state of the art RNA foundation model. One is broad and genome scale, the other is RNA specific, which is what makes the comparison interesting.</p></li><li><p>As the final arbiter of success I used T-Grammar, our proprietary regression model for RNA regulatory activity. Given a 5&#8217; or 3&#8217; UTR, it predicts two things per cell type: activity, how active the sequence is (think expression or stability), and cell specificity, how much that activity differs across cell types. Here T-Grammar is only the judge and is not part of the loop; it scores the generated sequences after the fact and never steers the generation.</p></li></ol><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.therna.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h2><strong>The setup</strong></h2><p>For a single cellular context, I took an in-house dataset measuring the impact of synthetic short variable 5&#8217; UTR sequences on expression and split it into a highly activating set and a highly repressive set based on the experimental measurements. The sequences are fully synthetic and the foundation models have never seen them in training. From each pool, I sampled some number of sequences and concatenated them into a single prompt via a <code>&lt;sep&gt;</code> token.</p><p>Then I generated a fixed number of nucleotides at a given temperature, <strong>producing</strong> a synthetic sequence. I built a bunch of these prompts, half from the activating set and half from the repressive set, generated a batch of sequences per prompt, and passed the sequences through T-Grammar to read out predicted activity and predicted cell-type specificity. Each box and point cloud below summarizes 320 generated sequences per number of examples in the prompt, which matters for reading the significance numbers later.</p><p>I also swept the number of in context examples rather than fixing it. For Evo2 I went from two examples in the prompt up to 256. For EVA I went up to 128, which is as far as that model would accommodate. Sweeping the example count is what lets us answer the more interesting question, which is not just whether in context learning happens but how much priming each model needs before the signal becomes clear, and whether activity and specificity behave the same way.</p><p>If the in context idea works, the continuations from high prompts should score higher on T-Grammar than the continuations from low prompts. If it does not, the two distributions should look identical. Neither model has any other way to know which prompts came from which pool, because no labels were ever provided.</p><h2><strong>Evo2:</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9h3f!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5018a4-4150-47fd-b7a7-5c86652e9e57_1164x466.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9h3f!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5018a4-4150-47fd-b7a7-5c86652e9e57_1164x466.png 424w, https://substackcdn.com/image/fetch/$s_!9h3f!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5018a4-4150-47fd-b7a7-5c86652e9e57_1164x466.png 848w, https://substackcdn.com/image/fetch/$s_!9h3f!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5018a4-4150-47fd-b7a7-5c86652e9e57_1164x466.png 1272w, https://substackcdn.com/image/fetch/$s_!9h3f!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5018a4-4150-47fd-b7a7-5c86652e9e57_1164x466.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9h3f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5018a4-4150-47fd-b7a7-5c86652e9e57_1164x466.png" width="1164" height="466" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/de5018a4-4150-47fd-b7a7-5c86652e9e57_1164x466.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:466,&quot;width&quot;:1164,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9h3f!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5018a4-4150-47fd-b7a7-5c86652e9e57_1164x466.png 424w, https://substackcdn.com/image/fetch/$s_!9h3f!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5018a4-4150-47fd-b7a7-5c86652e9e57_1164x466.png 848w, https://substackcdn.com/image/fetch/$s_!9h3f!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5018a4-4150-47fd-b7a7-5c86652e9e57_1164x466.png 1272w, https://substackcdn.com/image/fetch/$s_!9h3f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fde5018a4-4150-47fd-b7a7-5c86652e9e57_1164x466.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Evo2 in context learning, activity by number of examples (HEK293T). Blue is activating primed, red is repressive primed</em>.</figcaption></figure></div><p>Let&#8217;s start with activity. Across every example count from two to 256, the activating primed generations sit above the repressive primed generations. The activating cluster around 2.4 to 2.45 in predicted center of mass and the repressive sit closer to 2.0 to 2.1. The gap is present in two examples and widens as you add more, mostly because the repressive group drifts down while the activating stays put. This is the more legible of the two signals.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4x5k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F972c5041-93b0-47d3-b1ec-8568e204c6ef_1163x466.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4x5k!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F972c5041-93b0-47d3-b1ec-8568e204c6ef_1163x466.png 424w, https://substackcdn.com/image/fetch/$s_!4x5k!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F972c5041-93b0-47d3-b1ec-8568e204c6ef_1163x466.png 848w, https://substackcdn.com/image/fetch/$s_!4x5k!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F972c5041-93b0-47d3-b1ec-8568e204c6ef_1163x466.png 1272w, https://substackcdn.com/image/fetch/$s_!4x5k!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F972c5041-93b0-47d3-b1ec-8568e204c6ef_1163x466.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4x5k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F972c5041-93b0-47d3-b1ec-8568e204c6ef_1163x466.png" width="1163" height="466" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/972c5041-93b0-47d3-b1ec-8568e204c6ef_1163x466.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:466,&quot;width&quot;:1163,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4x5k!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F972c5041-93b0-47d3-b1ec-8568e204c6ef_1163x466.png 424w, https://substackcdn.com/image/fetch/$s_!4x5k!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F972c5041-93b0-47d3-b1ec-8568e204c6ef_1163x466.png 848w, https://substackcdn.com/image/fetch/$s_!4x5k!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F972c5041-93b0-47d3-b1ec-8568e204c6ef_1163x466.png 1272w, https://substackcdn.com/image/fetch/$s_!4x5k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F972c5041-93b0-47d3-b1ec-8568e204c6ef_1163x466.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"> <em>Evo2 in context learning, cell specificity by number of examples (HEK293T).</em></figcaption></figure></div><p>Specificity is the harder readout, and it is a harder biological problem to begin with. The activating primed continuations carry a higher predicted differential signal than the repressive primed ones at every example count, but the two groups sit much closer together than they did for activity. The difference for specificity is also lower in the actual samples used in the prompt. The activating stays near zero, dipping toward the middle of the sweep, while the repressive drifts steadily more negative as you add examples. So the separation is there from the first prompt but it is a smaller gap similar to the input data. Where a sequence pushes activity in one cell type versus another is a finer question than how active it is overall, so it makes sense that it is the harder pattern to pick up.</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1rVh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa619f53f-e23a-44a5-be35-6e13146abf86_966x466.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1rVh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa619f53f-e23a-44a5-be35-6e13146abf86_966x466.png 424w, https://substackcdn.com/image/fetch/$s_!1rVh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa619f53f-e23a-44a5-be35-6e13146abf86_966x466.png 848w, https://substackcdn.com/image/fetch/$s_!1rVh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa619f53f-e23a-44a5-be35-6e13146abf86_966x466.png 1272w, https://substackcdn.com/image/fetch/$s_!1rVh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa619f53f-e23a-44a5-be35-6e13146abf86_966x466.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1rVh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa619f53f-e23a-44a5-be35-6e13146abf86_966x466.png" width="966" height="466" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a619f53f-e23a-44a5-be35-6e13146abf86_966x466.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:466,&quot;width&quot;:966,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1rVh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa619f53f-e23a-44a5-be35-6e13146abf86_966x466.png 424w, https://substackcdn.com/image/fetch/$s_!1rVh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa619f53f-e23a-44a5-be35-6e13146abf86_966x466.png 848w, https://substackcdn.com/image/fetch/$s_!1rVh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa619f53f-e23a-44a5-be35-6e13146abf86_966x466.png 1272w, https://substackcdn.com/image/fetch/$s_!1rVh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa619f53f-e23a-44a5-be35-6e13146abf86_966x466.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"> <em>Evo2: when does the activating versus repressive split become statistically real? Mann-Whitney p value, log scale, with the p equals 0.05 line marked.</em></figcaption></figure></div><p>This panel makes the activity versus specificity comparison easier. Two things to notice. First, both signals are significant across the entire sweep by a wide margin, so neither is borderline anywhere, even at the smallest prompt. Activity is the stronger of the two at every count and pulls further ahead at the high end. Specificity runs consistently above activity, less significant but still far below the line the whole way. Both dip a little toward the middle of the sweep before dropping steeply at the top. Second, the message here is the gap between the two curves rather than the absolute values. With a large sample, a very small p value mostly tells you a separation is real, not how large it is. The reading is that specificity is reliably less separated than activity, even though both clear significance easily.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!L_34!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c023eac-583c-43c5-81db-8f6d89dd478a_1351x466.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!L_34!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c023eac-583c-43c5-81db-8f6d89dd478a_1351x466.png 424w, https://substackcdn.com/image/fetch/$s_!L_34!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c023eac-583c-43c5-81db-8f6d89dd478a_1351x466.png 848w, https://substackcdn.com/image/fetch/$s_!L_34!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c023eac-583c-43c5-81db-8f6d89dd478a_1351x466.png 1272w, https://substackcdn.com/image/fetch/$s_!L_34!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c023eac-583c-43c5-81db-8f6d89dd478a_1351x466.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!L_34!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c023eac-583c-43c5-81db-8f6d89dd478a_1351x466.png" width="1351" height="466" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c023eac-583c-43c5-81db-8f6d89dd478a_1351x466.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:466,&quot;width&quot;:1351,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!L_34!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c023eac-583c-43c5-81db-8f6d89dd478a_1351x466.png 424w, https://substackcdn.com/image/fetch/$s_!L_34!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c023eac-583c-43c5-81db-8f6d89dd478a_1351x466.png 848w, https://substackcdn.com/image/fetch/$s_!L_34!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c023eac-583c-43c5-81db-8f6d89dd478a_1351x466.png 1272w, https://substackcdn.com/image/fetch/$s_!L_34!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c023eac-583c-43c5-81db-8f6d89dd478a_1351x466.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"> <em>Evo2: size of the generated activating minus repressive gap against the real MPRA pool gap (dashed). Activity left, specificity right.</em></figcaption></figure></div><p>So the last Evo2 panel asks how large the generated gap is in absolute terms, not just whether it is significant. The dashed line marks the gap between the real activating and repressive MPRA pools, the ceiling we are chasing. For activity, the generated gap climbs as you add examples and by the end of the sweep is reaching that ceiling. For specificity, the generated gap sits above its ceiling across almost the whole range. Put another way, Evo2 produces sequences whose predicted activating minus repressive separation is as large as the real pools for activity and larger than the real pools for specificity, and the separation generally grows with more examples.</p><p>So the Evo2 takeaway is two parts. Activity is the cleaner, larger signal and shows up from the first prompt. Specificity is real and significant throughout, but it is the smaller and less separated of the two.</p><h2><strong>EVA:</strong></h2><p>EVA also does the task, once it is given more than a couple of examples. It takes the same <code>&lt;sep&gt;</code> delimited prompts, it scales up to the same range, and it produces continuations that T-Grammar can score. On the basic question of whether in context learning happens at all, EVA clears it for activity.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UruQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff801ef17-53ff-4e4f-b9d8-9a168d10999f_1164x466.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UruQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff801ef17-53ff-4e4f-b9d8-9a168d10999f_1164x466.png 424w, https://substackcdn.com/image/fetch/$s_!UruQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff801ef17-53ff-4e4f-b9d8-9a168d10999f_1164x466.png 848w, https://substackcdn.com/image/fetch/$s_!UruQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff801ef17-53ff-4e4f-b9d8-9a168d10999f_1164x466.png 1272w, https://substackcdn.com/image/fetch/$s_!UruQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff801ef17-53ff-4e4f-b9d8-9a168d10999f_1164x466.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UruQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff801ef17-53ff-4e4f-b9d8-9a168d10999f_1164x466.png" width="1164" height="466" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f801ef17-53ff-4e4f-b9d8-9a168d10999f_1164x466.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:466,&quot;width&quot;:1164,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UruQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff801ef17-53ff-4e4f-b9d8-9a168d10999f_1164x466.png 424w, https://substackcdn.com/image/fetch/$s_!UruQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff801ef17-53ff-4e4f-b9d8-9a168d10999f_1164x466.png 848w, https://substackcdn.com/image/fetch/$s_!UruQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff801ef17-53ff-4e4f-b9d8-9a168d10999f_1164x466.png 1272w, https://substackcdn.com/image/fetch/$s_!UruQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff801ef17-53ff-4e4f-b9d8-9a168d10999f_1164x466.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>EVA in context learning, activity by number of examples (HEK293T).</em></figcaption></figure></div><p>For activity, the activating primed boxes sit above the repressive primed ones across most of the sweep, so the direction is right, with one exception: at the two smallest prompts the groups are essentially tied. After that the activating pulls ahead, and the gap widens as the repressive group drifts down while the activating holds steady. So on the boxes EVA does strengthen with more examples for activity. The separation is still smaller than for Evo2, and as the significance panel shows, it is far less consistent from one count to the next.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!E5V-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92a4e785-ca21-4d38-b5ab-96303bab95fc_1163x466.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!E5V-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92a4e785-ca21-4d38-b5ab-96303bab95fc_1163x466.png 424w, https://substackcdn.com/image/fetch/$s_!E5V-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92a4e785-ca21-4d38-b5ab-96303bab95fc_1163x466.png 848w, https://substackcdn.com/image/fetch/$s_!E5V-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92a4e785-ca21-4d38-b5ab-96303bab95fc_1163x466.png 1272w, https://substackcdn.com/image/fetch/$s_!E5V-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92a4e785-ca21-4d38-b5ab-96303bab95fc_1163x466.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!E5V-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92a4e785-ca21-4d38-b5ab-96303bab95fc_1163x466.png" width="1163" height="466" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/92a4e785-ca21-4d38-b5ab-96303bab95fc_1163x466.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:466,&quot;width&quot;:1163,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!E5V-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92a4e785-ca21-4d38-b5ab-96303bab95fc_1163x466.png 424w, https://substackcdn.com/image/fetch/$s_!E5V-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92a4e785-ca21-4d38-b5ab-96303bab95fc_1163x466.png 848w, https://substackcdn.com/image/fetch/$s_!E5V-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92a4e785-ca21-4d38-b5ab-96303bab95fc_1163x466.png 1272w, https://substackcdn.com/image/fetch/$s_!E5V-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F92a4e785-ca21-4d38-b5ab-96303bab95fc_1163x466.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"> <em>EVA in context learning, cell specificity by number of examples (HEK293T).</em></figcaption></figure></div><p>The specificity signal is far fainter and, more tellingly, not consistent in direction. The activating and repressive groups sit close together at most counts, and at times the ordering flips, with the repressive group sitting at or above the activating group. At the counts where it does point the right way, the gap is small. This is the same activity versus specificity pattern as before, except for EVA specificity it is weak enough that even the sign is not stable.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QeQ4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F226fc838-5433-422b-8714-cf0bcc6e9e3b_1566x466.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QeQ4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F226fc838-5433-422b-8714-cf0bcc6e9e3b_1566x466.png 424w, https://substackcdn.com/image/fetch/$s_!QeQ4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F226fc838-5433-422b-8714-cf0bcc6e9e3b_1566x466.png 848w, https://substackcdn.com/image/fetch/$s_!QeQ4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F226fc838-5433-422b-8714-cf0bcc6e9e3b_1566x466.png 1272w, https://substackcdn.com/image/fetch/$s_!QeQ4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F226fc838-5433-422b-8714-cf0bcc6e9e3b_1566x466.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QeQ4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F226fc838-5433-422b-8714-cf0bcc6e9e3b_1566x466.png" width="1456" height="433" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/226fc838-5433-422b-8714-cf0bcc6e9e3b_1566x466.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:433,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!QeQ4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F226fc838-5433-422b-8714-cf0bcc6e9e3b_1566x466.png 424w, https://substackcdn.com/image/fetch/$s_!QeQ4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F226fc838-5433-422b-8714-cf0bcc6e9e3b_1566x466.png 848w, https://substackcdn.com/image/fetch/$s_!QeQ4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F226fc838-5433-422b-8714-cf0bcc6e9e3b_1566x466.png 1272w, https://substackcdn.com/image/fetch/$s_!QeQ4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F226fc838-5433-422b-8714-cf0bcc6e9e3b_1566x466.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"> <em>EVA: size of the activating minus repressive separation versus number of examples. Activity left, specificity right.</em></figcaption></figure></div><p>The separation curves tell the same story. Activity separation trends upward as you add examples, while specificity separation stays small and flat. So whatever EVA gains from a longer prompt shows up in activity, not in specificity. That is the opposite of Evo2, where both gaps grew toward and past the real pool ceiling.</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1ThJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45afb76b-3d20-4d5f-a6b7-f66a23df8eaf_966x466.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1ThJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45afb76b-3d20-4d5f-a6b7-f66a23df8eaf_966x466.png 424w, https://substackcdn.com/image/fetch/$s_!1ThJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45afb76b-3d20-4d5f-a6b7-f66a23df8eaf_966x466.png 848w, https://substackcdn.com/image/fetch/$s_!1ThJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45afb76b-3d20-4d5f-a6b7-f66a23df8eaf_966x466.png 1272w, https://substackcdn.com/image/fetch/$s_!1ThJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45afb76b-3d20-4d5f-a6b7-f66a23df8eaf_966x466.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1ThJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45afb76b-3d20-4d5f-a6b7-f66a23df8eaf_966x466.png" width="966" height="466" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/45afb76b-3d20-4d5f-a6b7-f66a23df8eaf_966x466.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:466,&quot;width&quot;:966,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1ThJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45afb76b-3d20-4d5f-a6b7-f66a23df8eaf_966x466.png 424w, https://substackcdn.com/image/fetch/$s_!1ThJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45afb76b-3d20-4d5f-a6b7-f66a23df8eaf_966x466.png 848w, https://substackcdn.com/image/fetch/$s_!1ThJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45afb76b-3d20-4d5f-a6b7-f66a23df8eaf_966x466.png 1272w, https://substackcdn.com/image/fetch/$s_!1ThJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F45afb76b-3d20-4d5f-a6b7-f66a23df8eaf_966x466.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"> <em>EVA: when does the activating versus repressive split become statistically real? Mann-Whitney p value, log scale, p equals 0.05 line marked.</em></figcaption></figure></div><p>The significance panel is the clearest place to compare the two, and with a large sample it is unforgiving. For EVA, activity is not significant at all at the two smallest prompts. After that it does separate, but along a jagged, sawtooth path: strong at one count, weak at the next, reaching its best only at the high end, where it finally rivals Evo2. Specificity is worse. It fails the significance line at the smallest prompts and again partway through the sweep, lands right on the threshold at one count, and clears it cleanly at only a few. There is no smooth trend, and at several counts the specificity split is not statistically real. Evo2, by contrast, was significant at every count by a wide margin.</p><p>Putting the two side by side, the contrast is sharp. Evo2 separates activating from repressive at every example count, for both readouts, by a wide margin. EVA separates cleanly only at some counts, shows no separation at the smallest prompts, and on specificity is inconsistent enough that the direction sometimes flips. The larger sample is part of why this is now visible, since an earlier, smaller run made EVA look more uniformly significant than it is. I would still be careful about reading too much into why. The two models are different in kind. Evo2 is a broad genome scale model and EVA is RNA specific, the two were run over different ranges of example counts, and this is all in silico. One reasonable hypothesis is that the wider training grammar behind Evo2 carries into the fine structure function relationship that specificity depends on, but that is a guess, and the cleaner test is the wet lab rather than more in silico comparison.</p><h2><strong>Are the generations copies of the prompt?</strong></h2><p>One worry hangs over all of this. If the model just parrots the sequences in the prompt, the steering is not steering at all, it is the prompt played back, and the effect would only look stronger as you add more examples. So for every generated sequence I measured its highest identity to any of the in context examples it was shown.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!i-Su!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5598dbb2-4fc9-4a4e-bc60-775269e2ef85_1366x466.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!i-Su!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5598dbb2-4fc9-4a4e-bc60-775269e2ef85_1366x466.png 424w, https://substackcdn.com/image/fetch/$s_!i-Su!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5598dbb2-4fc9-4a4e-bc60-775269e2ef85_1366x466.png 848w, https://substackcdn.com/image/fetch/$s_!i-Su!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5598dbb2-4fc9-4a4e-bc60-775269e2ef85_1366x466.png 1272w, https://substackcdn.com/image/fetch/$s_!i-Su!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5598dbb2-4fc9-4a4e-bc60-775269e2ef85_1366x466.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!i-Su!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5598dbb2-4fc9-4a4e-bc60-775269e2ef85_1366x466.png" width="1366" height="466" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5598dbb2-4fc9-4a4e-bc60-775269e2ef85_1366x466.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:466,&quot;width&quot;:1366,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!i-Su!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5598dbb2-4fc9-4a4e-bc60-775269e2ef85_1366x466.png 424w, https://substackcdn.com/image/fetch/$s_!i-Su!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5598dbb2-4fc9-4a4e-bc60-775269e2ef85_1366x466.png 848w, https://substackcdn.com/image/fetch/$s_!i-Su!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5598dbb2-4fc9-4a4e-bc60-775269e2ef85_1366x466.png 1272w, https://substackcdn.com/image/fetch/$s_!i-Su!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5598dbb2-4fc9-4a4e-bc60-775269e2ef85_1366x466.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Similarity check: for each generated sequence, its maximum identity to any in context example, by number of examples (HEK293T). The lines near the top mark where a generation would be a near copy (0.95&#8211;1.0).</em></figcaption></figure></div><p>Identity does rise as you add examples, which makes sense, since a longer prompt gives the model more to lean on and more chances at a partial match. But it rises slowly and flattens out well short of copying. Even at the largest prompts a typical generation overlaps its nearest example by only around two thirds, and the bulk stay clear of the copy line at the top of the plot. This holds for both models and both prompt groups. So the sequences are genuinely new.</p><h2><strong>Why I find this interesting</strong></h2><p>One, this is in context learning at the sequence level, not the language level. The token here is a nucleotide. The pattern the model latches onto is not English or code but presumably some combination of k-mer composition, motif content, and structural propensity. Whatever that combination is, it transfers to a separate model trained on a separate readout. The two models have never spoken to each other and still agree, and the degree of agreement differed between them, most visibly on the harder of the two outputs.</p><p>Two, no training. No fine tuning. No reward model. No labeled dataset on the foundation model side. The cost of getting a usable generator of &#8220;high activity 5&#8217; UTRs for this cell line&#8221; was the cost of sampling a few examples and gluing them with pipes. If the result holds up under bench validation, that is an efficient way to get there.</p><p>Three, this kind of prompt-based steering opens up a different mode of how we use foundation models internally. The path so far has been: collect data, train a specialist (T-Grammar), use the specialist to score or generate. The alternative path this experiment hints at is: collect data, use the specialist as an oracle to filter generations from a foundation model that is being steered by a small number of in context examples. We keep the specialist where it is most useful, predicting activity from sequence with proper calibration, and let the foundation model write plausible nucleotide sequences, without teaching it anything new. The comparison gives an early read on which model recovers the signal more reliably for this task.</p><p>One caveat here, we are validating in silico, with one model (T-Grammar) judging the other two (Evo2 and EVA). The interesting next step is the wet lab. If the Lab in the Loop generates a small set of prompt steered sequences, splits them into activating primed and repressive primed batches, and runs them through the same MPRA assay that produced the training data in the first place, the in context signal either survives in cells or it does not. That is the result that ultimately matters, and it is the one that would tell us whether the difference we see here is real or an artifact of one model judging another.</p><p>The promise of in-context learning has been around for a few years on the language side. Show a model a few examples, get a model that does the task. Seeing it on RNA sequence design, with two different foundation models agreeing on what counts as a good generation, was a striking thing to watch.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.therna.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Designing Medicines for One: The Future of Individualized RNA Medicines]]></title><description><![CDATA[Therna Biosciences recently unveiled its collaboration with Charles River to advance individualized medicines for patients with ultra-rare diseases.]]></description><link>https://blog.therna.com/p/designing-medicines-for-one-the-future</link><guid isPermaLink="false">https://blog.therna.com/p/designing-medicines-for-one-the-future</guid><dc:creator><![CDATA[Nazli Azimi]]></dc:creator><pubDate>Wed, 29 Apr 2026 17:19:02 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3yaY!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9625529-86f3-4606-8522-cd8ac417328a_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Therna Biosciences recently unveiled <a href="https://www.prnewswire.com/news-releases/therna-announces-collaboration-with-charles-river-to-advance-single-patient-personalized-rna-therapeutics-302704703.html">its collaboration</a> with Charles River to advance individualized medicines for patients with ultra-rare diseases. Our first program is focused on a patient with rapidly progressing form of lung fibrosis caused by a unique mutated gene. With no available treatment options, the need for a tailored RNA medicine was extremely urgent.</p><p>Following the announcement, several reporters expressed interest in learning more about Therna&#8217;s n=1 strategy, with <a href="https://endpoints.news/about-endpoints-news/">Ryan Cross</a> at <a href="https://endpoints.news/">Endpoints News</a> asking how the <a href="https://www.fda.gov/regulatory-information/search-fda-guidance-documents/considerations-use-plausible-mechanism-framework-develop-individualized-therapies-target-specific">FDA&#8217;s recent draft guidance</a>, which introduces a framework for accelerating tailored, individualized treatments for ultra-rare diseases, could impact the company. This guidance marks an important moment for the field and an opportunity to define how n=1 approaches can be developed with both speed and scientific rigor. In this blog, I outline our vision and approach to advancing n=1 treatments for patients who have no alternative treatment options. Central to this effort is our AI-enabled RNA platform and its alignment with the scientific and regulatory requirements of individualized medicine.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.therna.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Therna&#8217;s approach is built on the premise that RNA can be designed with extreme precision. We have developed an AI-driven platform trained on massive amounts of proprietary experimental data generated in our labs, enabling us to interrogate how RNA behaves in biological systems.</p><p>When creating the model, we asked questions about how RNA interacts with its biological environment and how those interactions influence behavior, translation efficiency, tissue and cell type expression and longevity. We also examined RNA structure, stability, and interactions with RNA-binding proteins, as well as how DNA, RNA, and proteins work together within the cell. As a result, our AI model with RNA intelligence can generatively design RNA sequences with characteristics that we want. For example, we can program the mRNA to be expressed exclusively in a tissue or cell type of interest, to be more durable, and achieve high translation efficiency to protein output. Similarly, we can find unique target sites within the transcript and design small oligonucleotides, such as ASOs and siRNAs, to increase, decrease, or fine tune the expression of the mRNA. Rather than producing transient biological signals, these engineered RNA sequences are designed to function as therapeutics.</p><p>By integrating computational design with experimental validation, we can generate better RNA medicines faster and translate those designs into candidates suitable for development. This approach has the potential to improve the cost-efficiency of developing highly individualized therapies, enabling programs that would not have been feasible using conventional drug discovery approaches. In doing so, it opens the door to programmable RNA medicines with previously unattainable properties.</p><p>While single-patient programs are an important application of our platform, Therna is advancing a broader pipeline of RNA medicines across multiple disease areas with significant unmet need. These efforts leverage the same design and validation framework to develop therapeutics at scale.</p><p>Our rationale for advancing individualized medicine is grounded in four core principles:</p><p><strong>First</strong>, these patients are often overlooked and have no viable treatment options. There is limited commercial incentive for industry to pursue such therapies, and academic institutions typically lack the resources to develop them at scale. We believe there is a responsibility to address this gap and bring forward solutions where none exist.</p><p><strong>Second, </strong>our AI-enabled platform allows us to rapidly design and validate effective RNA medicines. For these patients, time is of the essence. We have demonstrated the ability to design and experimentally validate candidates in under three months and advance them into pre-clinical development &#8211; an unprecedented acceleration of traditional drug development timelines.</p><p><strong>Third</strong>, each program generates highly valuable data that both validates and strengthens our platform. From initial RNA design through experimental testing and clinical validation, these data improve our models and expand their predictive capabilities. Over time, this learning builds, benefiting not only future n=1 patients but also our broader therapeutic programs. <br><br><strong>Fourth</strong>, advancing these programs helps establish a viable framework for individualized medicine. While these efforts are less resource-intensive than traditional drug development due to the absence of large clinical trials, they still require meaningful investment. Demonstrating what is possible is an important step toward enabling broader adoption of individualized approaches for patients who need them. <br><br>Therna&#8217;s approach to individualized medicine reflects a convergence of scientific innovation, regulatory evolution, and urgent patient need. By combining AI-enabled RNA design with rigorous experimental validation, we are establishing a new model for developing therapies for patients who have historically been left behind by traditional drug development. These early programs not only provide a path forward for individuals with ultra-rare diseases, but also generate the data and experience needed to scale this approach more broadly. As the field continues to evolve, we believe Therna will be at the forefront of developing individualized RNA medicines, expanding what is possible for patients and redefining how therapies are developed.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.therna.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[A Look Back at Our First Year: Building Therna Biosciences in 2025]]></title><description><![CDATA[We started Therna Biosciences in April 2025 with a simple belief: RNA is a language, and it can be learned and engineered.]]></description><link>https://blog.therna.com/p/a-look-back-at-our-first-year-building</link><guid isPermaLink="false">https://blog.therna.com/p/a-look-back-at-our-first-year-building</guid><dc:creator><![CDATA[Nazli Azimi]]></dc:creator><pubDate>Tue, 30 Dec 2025 17:39:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3yaY!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9625529-86f3-4606-8522-cd8ac417328a_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We started Therna Biosciences in April 2025 with a simple belief: RNA is a language, and it can be learned and engineered. What has changed since then is not that belief, but the confidence that we are building the tools to make it real.</p><p>RNA medicines have already transformed medicine, but the next phase requires deeper control. Control over tissue specificity. Control over durability. Control over safety and expression. Biology has always held these answers, but only recently have we had the computational power and data scale to uncover them. This is the moment Therna Biosciences was built for.</p><p>From day one, we set out to integrate deep RNA biology with generative AI in a way that respects biological complexity rather than flattening it. At Therna, we have built an AI platform to design novel RNA medicines that are longer-lasting, safe, and more effective. Our approach is grounded in a lab in the loop system, where models are continuously informed by carefully designed experiments and high quality biological data. Asking the right biological questions has been just as important as building the right models.</p><p>What makes Therna Biosciences different is that we are not only an AI company applying models to biology. We are deeply rooted in the data we generate. Our experimental systems are designed to produce biologically meaningful, high resolution datasets that directly shape our models. Better data leads to better models, and better models allow us to ask more precise biological questions. This feedback loop is core to how we operate and why our platform continues to improve with every cycle.</p><p>After two years of stealth operation, we launched the company officially this year by securing seed funding from investors (Pear VC, AIX, and Fusion Fund) who believed in our mission and vision. We assembled an experienced team that brings together deep expertise in RNA biology, AI, and translational and preclinical science to streamline the AI-powered discoveries into reality by designing next generation RNA medicines.</p><p>We were proud to be accepted into both the NVIDIA Inception program and the Google for Startups Cloud Program. These partnerships reflect the seriousness of our technical ambition and have strengthened the computational foundation behind our work. As part of our collaboration with NVIDIA, we are working with CodonFM, the new RNA foundation model that learns the rules of RNA by reading sequences in biological units called codons to reveal patterns that matter for therapeutic design. Integrating Therna&#8217;s proprietary RNA biology data with this class of models and world class compute infrastructure helps accelerate the development of programmable RNA medicines in ways that were not possible before.</p><p>Perhaps most importantly, we validated our core premise. RNA is a language, and it can be learned and engineered. With the right data, the right experiments, and the right models, RNA can be designed with intent. Fit for purpose mRNA. Smarter targeting strategies. Faster iteration cycles. Work that once took years can now happen in weeks.</p><p>As we look ahead to 2026, the opportunity feels even larger. We are excited to scale our platform, expand the scope of what programmable RNA can do, and translate our advances into medicines that matter. This is still the beginning, but the foundation is strong, and the momentum is real. Therna Biosciences is here to become The RNA company.</p><p>Thank you to our team, our partners, and everyone who believes that the future of RNA medicine can be written with purpose.</p><p>We are just getting started.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.therna.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.therna.com/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[The Case for Foundation Models in Biology]]></title><description><![CDATA[Rethinking scale: context, diversity, and design for biological foundation models]]></description><link>https://blog.therna.com/p/the-case-for-foundation-models-in</link><guid isPermaLink="false">https://blog.therna.com/p/the-case-for-foundation-models-in</guid><dc:creator><![CDATA[Amir Momen-Roknabadi]]></dc:creator><pubDate>Fri, 12 Sep 2025 15:31:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!gScn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc24f3e2-0d32-4a93-bd2b-9793f7d3b051.tif" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The past few years have seen biology embrace the ideas of large language models. Genomic and transcriptomic data, at some level, are also sequences with their own language and grammar. The cell often translates one to the other seamlessly. Why not then apply the same tricks that worked so well in language? Build massive models, train them with self-supervised objectives, and expect breakthroughs.</p><p>Reality has been more complicated. Across benchmarks, far smaller supervised models often outperform large pretrained ones. For some, this has led to the conclusion that scaling has failed in biology (or at least to a questioning of the underlying premise). </p><p>I think that conclusion is premature. Scaling is alive, but it plays out differently in biology than in text or images. Success depends on scaling the right axes &#8212; not just parameters, but context length, data diversity, objectives, tokenization, and architecture. And it depends on evaluating models fairly, with methods that reveal their strengths rather than obscure them. </p><p>In this post, I am laying out why scaling still matters for biology, why in fact foundation models are crucial for bringing biology into the next decade, and more importantly what dimensions we should be scaling, and how to think about evaluation.</p><h1>Supervised Models Excel with Abundant Data, but Biology Is Far More Complex</h1><p>In genomics, supervised models excel where labels are plentiful. Human and mouse genomes have benefited from massive data-generation consortia. Disease genetics, ENCODE-like catalogs of regulatory activity, popular immortalized cell lines; these are rich ecosystems where supervised models can thrive. Feed them thousands of transcriptomic and epigenomic tracks and they deliver excellent performance.</p><p>But biology extends far beyond this tight circle. Step into zebrafish, plants, or microbial consortia, and labeled data quickly thins out. Assays become noisy, annotations sparse, and sample sizes small. Training high-capacity supervised models is simply not feasible in these settings.</p><p>This is where foundation models matter. Pretraining across species and contexts lowers the barrier in data-poor domains. A model like Evo 2, trained on thousands of genomes across the tree of life, carries useful priors even for organisms studied by only a handful of labs. Its broad evolutionary grounding allows transfer: patterns learned from one species help interpret another. And remarkably, Evo 2 achieves state-of-the-art performance on both non-coding and coding variant prediction in humans despite being trained only on reference genomes, not on expensive omics tracks. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gScn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc24f3e2-0d32-4a93-bd2b-9793f7d3b051.tif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gScn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc24f3e2-0d32-4a93-bd2b-9793f7d3b051.tif 424w, https://substackcdn.com/image/fetch/$s_!gScn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc24f3e2-0d32-4a93-bd2b-9793f7d3b051.tif 848w, https://substackcdn.com/image/fetch/$s_!gScn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc24f3e2-0d32-4a93-bd2b-9793f7d3b051.tif 1272w, https://substackcdn.com/image/fetch/$s_!gScn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc24f3e2-0d32-4a93-bd2b-9793f7d3b051.tif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gScn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc24f3e2-0d32-4a93-bd2b-9793f7d3b051.tif" width="1456" height="867" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dc24f3e2-0d32-4a93-bd2b-9793f7d3b051.tif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:867,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:11149304,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/tiff&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://thernabio.substack.com/i/173234975?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc24f3e2-0d32-4a93-bd2b-9793f7d3b051.tif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gScn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc24f3e2-0d32-4a93-bd2b-9793f7d3b051.tif 424w, https://substackcdn.com/image/fetch/$s_!gScn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc24f3e2-0d32-4a93-bd2b-9793f7d3b051.tif 848w, https://substackcdn.com/image/fetch/$s_!gScn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc24f3e2-0d32-4a93-bd2b-9793f7d3b051.tif 1272w, https://substackcdn.com/image/fetch/$s_!gScn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdc24f3e2-0d32-4a93-bd2b-9793f7d3b051.tif 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Evo 2 achieves strong zero-shot performance on predicting human clinical variants across both coding and noncoding regions, outperforming baselines without relying on omics tracks. PhyloP is a conservation-based baseline. (adapted from the <a href="https://doi.org/10.1101/2025.02.18.638918">Evo 2 paper</a>). </figcaption></figure></div><p></p><p>The lesson: supervised models may be dominating in rich-data niches for the time being. However, foundation models are indispensable in sparse ones. And it should be clear to everyone that much of biology is data-sparse.</p><h1>Benchmarking Pitfalls: Why Evaluation Choices Matter</h1><p>I feel like there is a tendency in our field to downplay the value of foundation models. But in reality, benchmarking of models requires care and attention. When foundation models are benchmarked, the results often hinge on methodological details that are easy to overlook.</p><h2>1. Layer Choice Is Not a Nitpick</h2><p>Transformers do not distribute information evenly across layers. Early layers capture local features; middle layers often encode rich structural and functional signals; late layers tilt toward autoregressive objectives. Picking the wrong layer to probe can make a model look weak.</p><p>Yet many benchmarks report results from a single layer or from a naive averaging of token embeddings. That choice can flip conclusions. For Evo 2, for example, the authors show that probing layer 20 yields excellent classification accuracy on BRCA1 variants; whereas, probing layers 1-3 produces far worse results. Without systematic layer sweeps and thoughtful pooling strategies, comparisons between models become unreliable.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OhvN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d9417e3-f65b-4663-99a2-6af3c635fb9b.tif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OhvN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d9417e3-f65b-4663-99a2-6af3c635fb9b.tif 424w, https://substackcdn.com/image/fetch/$s_!OhvN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d9417e3-f65b-4663-99a2-6af3c635fb9b.tif 848w, https://substackcdn.com/image/fetch/$s_!OhvN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d9417e3-f65b-4663-99a2-6af3c635fb9b.tif 1272w, https://substackcdn.com/image/fetch/$s_!OhvN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d9417e3-f65b-4663-99a2-6af3c635fb9b.tif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OhvN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d9417e3-f65b-4663-99a2-6af3c635fb9b.tif" width="1456" height="437" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d9417e3-f65b-4663-99a2-6af3c635fb9b.tif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:437,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4496304,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/tiff&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://thernabio.substack.com/i/173234975?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d9417e3-f65b-4663-99a2-6af3c635fb9b.tif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OhvN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d9417e3-f65b-4663-99a2-6af3c635fb9b.tif 424w, https://substackcdn.com/image/fetch/$s_!OhvN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d9417e3-f65b-4663-99a2-6af3c635fb9b.tif 848w, https://substackcdn.com/image/fetch/$s_!OhvN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d9417e3-f65b-4663-99a2-6af3c635fb9b.tif 1272w, https://substackcdn.com/image/fetch/$s_!OhvN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d9417e3-f65b-4663-99a2-6af3c635fb9b.tif 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Careful selection of layers is essential for fair evaluation of transformer models. AUROC performance in BRCA1 variant classification varies widely across layers, with Evo 2 block 20 providing the strongest results. This highlights how layer choice can dramatically affect conclusions (adapted from the <a href="https://doi.org/10.1101/2025.02.18.638918">Evo 2 paper)</a>.</figcaption></figure></div><p></p><h2>2. Cropping Results Misses the Full Story</h2><p>Benchmarks like TraitGym illustrate another problem. Evo 2 lags behind specialized models on some complex traits but outperforms them on Mendelian ones. This makes biological sense: Mendelian traits are often driven by strong-effect variants in coding or conserved regulatory regions, where evolutionary pretraining is powerful. Complex traits, by contrast, are polygenic and data-rich, favoring supervised models tuned to phenotype-specific signals.</p><p>But over and over again, critics simply share a cropped version of this evaluation. Sharing only the right-hand panel of a benchmark, the slice where supervised models win, gives a skewed impression. Reporting full grids reveals the trade-offs: foundation models recognize evolutionary disruption; supervised models capture subtle statistical associations. Even in humans where we have plenty of data, both stories are true, and both matter.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ph7y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeb9f48a-e912-4d30-a895-f6e583fe3167_1280x1276.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ph7y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeb9f48a-e912-4d30-a895-f6e583fe3167_1280x1276.png 424w, https://substackcdn.com/image/fetch/$s_!ph7y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeb9f48a-e912-4d30-a895-f6e583fe3167_1280x1276.png 848w, https://substackcdn.com/image/fetch/$s_!ph7y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeb9f48a-e912-4d30-a895-f6e583fe3167_1280x1276.png 1272w, https://substackcdn.com/image/fetch/$s_!ph7y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeb9f48a-e912-4d30-a895-f6e583fe3167_1280x1276.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ph7y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeb9f48a-e912-4d30-a895-f6e583fe3167_1280x1276.png" width="1280" height="1276" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eeb9f48a-e912-4d30-a895-f6e583fe3167_1280x1276.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1276,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ph7y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeb9f48a-e912-4d30-a895-f6e583fe3167_1280x1276.png 424w, https://substackcdn.com/image/fetch/$s_!ph7y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeb9f48a-e912-4d30-a895-f6e583fe3167_1280x1276.png 848w, https://substackcdn.com/image/fetch/$s_!ph7y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeb9f48a-e912-4d30-a895-f6e583fe3167_1280x1276.png 1272w, https://substackcdn.com/image/fetch/$s_!ph7y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feeb9f48a-e912-4d30-a895-f6e583fe3167_1280x1276.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image buttonBase-GK1x3M"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg" class="icon-noB79L"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image buttonBase-GK1x3M"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2 icon-noB79L"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">In TraitGym benchmarks, Evo 2 performs better on Mendelian traits, while supervised models do better on complex traits. Showing the full result grid is essential: cropping to only the supervised wins obscures the complementary strengths of each approach (adapted from the <a href="https://doi.org/10.1101/2025.02.11.637758">TraitGym paper</a>).</figcaption></figure></div><h1>Noise Today Can Be Structure Tomorrow</h1><p>One common critique is that most of the genome is &#8220;noise.&#8221; Intergenic regions make up ~75% of mammalian genomes, and many positions seem unconserved. If only ~10% of nucleotides are conserved across species, the argument goes, why waste model capacity predicting the rest?</p><p>This view misrepresents regulatory biology. Intergenic regions are not uniform deserts. They are patchworks of functional elements embedded in less constrained sequence. Enhancers, silencers, and insulators sit scattered across these expanses, looping over vast distances to control genes. Chromatin domains partition the genome into 3D compartments that matter for transcriptional regulation.</p><p>The ENCODE 2025 encyclopedia catalogs millions of candidate regulatory elements in human and mouse alone. Many of these lie in &#8220;non-conserved&#8221; territory. Sequence-level conservation is not the right proxy: regulatory function often persists through network-level conservation, where different motifs evolve to achieve the same control logic.</p><p>When models struggle to learn from intergenic regions, it does not mean those regions are meaningless. It means our objectives are insufficient. Absent large swaths of data, standard next-token prediction may miss distal and sparse dependencies. Here, addition of supervised tasks, predicting chromatin contacts, enhancer-promoter loops, or expression changes under perturbation, could teach models to extract real structure from apparent noise.</p><h1>Scaling Beyond Parameters</h1><p>In public discourse, scaling is often shorthand for &#8220;adding parameters.&#8221; Bigger is better. But in biology, parameters are only one axis, and sometimes not even the most important one.</p><ul><li><p><strong>Context length.</strong> Many regulatory interactions span hundreds of kilobases. Standard autoregressive training with limited windows will miss them. Long-context models like Evo 2 and AlphaGenome, with million-token windows, show why context scaling can be more impactful than sheer size.</p></li><li><p><strong>Tokenization.</strong> Single nucleotide tokens are simple but not necessarily optimal. Codons, kmers, or adaptive schemes can encode biological structure better, letting smaller models outperform larger but poorly tokenized ones.</p></li><li><p><strong>Readouts.</strong> Linear probes on the right intermediate layer can beat more complex architectures on the wrong one. Benchmarking must separate engineering choices from fundamental model limits.</p></li><li><p><strong>Data breadth.</strong> A model trained only on human data will struggle with plants. One trained only on coding sequences will miss regulatory grammar. Scaling species diversity, assay types, and experimental contexts often delivers larger gains than adding layers.</p></li></ul><p><br>Scaling in biology is multi-dimensional. The critical question is not &#8220;how big is the model?&#8221;, but &#8220;what axes are we scaling, and are they aligned with biological signals&#8221;?</p><h1>Architectures for Biology, Not Just Borrowed from Language</h1><p>Language models advanced because architecture and data evolved together. Self-attention unlocked long-range dependencies; tokenization improved; datasets scaled; instruction tuning taught models to use their knowledge.</p><p>Biology will follow a similar trajectory, but with its own twists. The signals we care about are inherently bidirectional, multimodal, and structured in 3D.</p><ul><li><p><strong>Bidirectionality.</strong> Enhancers regulate promoters upstream and downstream. RNA folding depends on base-pairing across both directions. Autoregressive models that only look backward miss half the story.</p></li><li><p><strong>Long-range, sparse interactions.</strong> Unlike text, where nearby words matter most, biological regulation often skips over large spans. Sparse attention or hierarchical models may capture this better.</p></li><li><p><strong>Multi-scale patterns.</strong> Chromatin domains, local motifs, 3D genome structure; biology is layered in ways language is not. Standard transformers may not capture these efficiently.</p></li></ul><p>We likely have not yet found the optimal architecture for biological sequences. Borrowing directly from NLP will take us part of the way, but breakthroughs will come from designs tailored to biological invariances.</p><h1>The Data Frontier: Diversity, Perturbations, and Synthetic Biology</h1><p>In our field, there is also a sense that we are approaching the limits of meaningful biological data. This is simply wrong. OpenGenome2 and similar collections are milestones, not endpoints. Sequence diversity is vast; microbial communities, metagenomes, plants, and understudied clades remain under-sampled. Functional diversity is even larger. Perturbation assays, multi-modal single-cell data, and time-series measurements are only beginning to scale.</p><p>But most importantly, we are no longer limited to natural data. Genome-scale generative processes and genome foundries mean that we can design synthetic sequences and test them at scale, effectively creating new training data beyond what evolution provides. Evo itself demonstrates this: models that generate and evaluate synthetic variation expand the dataset in directions natural diversity never explored.</p><p>Data growth in biology is not about chasing the trillion-token thresholds of NLP. It is about expanding along the biologically relevant axes: species, conditions, modalities, perturbations, and designed diversity.</p><h1>Foundation Modeling Is Needed More Than Ever</h1><p>Taken together, these points argue for a reframing. Scaling in biology is not dead. It is conditional.</p><ul><li><p>Foundation modeling helps most where data is sparse.</p></li><li><p>Scale fails if we probe the wrong layers or delude ourselves by cropping benchmarks.</p></li><li><p>Scale needs objectives that respect biological regulation.</p></li><li><p>Scale is multi-dimensional: context length, tokenization, data breadth, architecture, not just parameters.</p></li><li><p>Scale depends on data diversity, including synthetic generation.</p></li></ul><p>When these conditions are met, scaling delivers. Evo 2&#8217;s performance on variant interpretation, foundation models&#8217; ability to transfer across species, and the early success of long-context architectures are all evidence. The story is not failure; it is refinement.</p><h1>Conclusion</h1><p>Scaling has always been about more than size. In biology, it is about matching objectives, architectures, and data to the underlying signals. Dismissing scaling because supervised models win in data-rich niches misses the broader picture.</p><p>The right framing is this: scaling is alive, but it must be given the right instructions, such as longer contexts, better tokenization, richer objectives, broader data. Under those conditions, scaling unlocks biological insight in places where no supervised model could even start.</p><p>Scaling works. We just need to scale the things that matter.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.therna.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading! Subscribe for free to receive new posts and support our work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>