The question

Can open-weight language models, running on UC Davis hardware, be trusted to interpret proteomics results — and what should the prompt say so they do it honestly?

DE-LIMP is the Shiny application the UC Davis Proteomics Core uses to analyse mass-spectrometry data. Its AI features write an interpretation of a differential expression result: which proteins changed, whether the experiment looks sound, what it might mean. Those features sent data to Google's Gemini API.

Two reasons to move that in-house:

  1. Data stays local. Proteomics data is often unpublished and sometimes clinical. Whether to send it to a commercial API should be each lab's decision to avoid.
  2. Cost. Per-token cloud pricing scales badly across a core facility's throughput.

UC Davis runs an internal LLM gateway serving four open-weight models on local GPUs. This report answers whether they are good enough, which one to use, and what to change in DE-LIMP so that any of them behaves.

Why the answer is not obvious

An AI writing about proteomics can be wrong in a way that is nearly undetectable.

Proteins are identified by accession codes like P30838. Asked to explain a result, a model may state that this is a haemoglobin subunit and build a confident paragraph about blood contamination on top of it. It is actually ALDH3A1, an aldehyde dehydrogenase. Nothing in the output looks wrong — the numbers are right, the prose is fluent, the reasoning hangs together. Only someone who checks the accession finds the error.

That is the failure this work set out to measure, and then to eliminate.


Terms used in this report

logFC — log2 fold-change. How much a protein's measured abundance differs between two conditions. −3.31 means roughly 10× lower.

adj.P.Val — p-value corrected for testing thousands of proteins at once. Below 0.05 is conventionally "significant".

B — limma's log-odds that a protein is genuinely differentially expressed. Higher means stronger evidence. It is not a batch-effect measure.

NPrec — how many peptide precursors were used to quantify the protein. NPrec = 1 means the result rests on a single measurement.

PropObs — the fraction of possible precursor × run measurements actually observed. A low value means most of the protein's quantification was inferred by the pipeline's missing-value model rather than measured.

Contaminant (Cont_ prefix) — protein from outside the sample: bovine, from cell-culture serum, or human keratin from skin and dust. Must be excluded from biological conclusions.

Tool calling — letting a model call a real function mid-answer, here a UniProt database query, instead of answering from memory.