sycamore

Sycamore

geranium logo
Sycamore

Synthetic Characterization for Evaluating Genomics Visualization Retrieval

Citation

Preprint: Huyen N. Nguyen, Astrid van den Brandt and N. Gehlenborg, “Sycamore: Characterizing Synthetic Personas for Evaluating Genomics Visualization Retrieval,” arXiv Preprint, doi: 10.48550/arXiv.2605.08630.

@article{nguyen2026sycamore,
  author={Nguyen, Huyen N. and van den Brandt, Astrid and Gehlenborg, Nils},
  journal={arXiv Preprint}, 
  title={Sycamore: Characterizing Synthetic Personas for Evaluating Genomics Visualization Retrieval}, 
  year={2026},
  doi={10.48550/arXiv.2605.08630},
  url={https://arxiv.org/abs/2605.08630}}

A three-condition probe of how synthetic personas evaluate the Geranium retrieval system, built on top of a persona-generator engine that produces PersonaCite-grounded synthetic personas of genomics researchers.

image

Viewer

User interface below. For an interactive demo, go to: https://www.youtube.com/watch?v=h_Qm7L_C4CA.

img.png

Run Geranium first

Sycamore is a wrapper that drives a running Geranium server. You must clone and start Geranium before anything in Sycamore will work.

# ---- Terminal 1: Geranium ----
git clone https://github.com/gosling-lang/geranium     # if you haven't already
cd geranium

python -m venv .venv
source .venv/bin/activate                              # Windows: .venv\Scripts\activate
pip install -r requirements.txt                        

cd server
python app.py                                          # serves on http://localhost:5001
# leave running

Leave that running in its own terminal. Sycamore will issue search queries against it.

Live session viewer 📺

A streaming UI for watching one evaluator drive Geranium turn by turn:

# ---- Terminal 2: Sycamore one-time setup (skip if already done) ----
cd /path/to/sycamore

python -m venv .venv
source .venv/bin/activate                              # Windows: .venv\Scripts\activate
pip install -r requirements.txt

echo "ANTHROPIC_API_KEY=sk-..." > .env
echo "LLM_PROVIDER=anthropic"   >> .env

python step1_parse_personas.py                         # -> data/personas.json
python step2_parse_evidence.py                         # -> data/evidence.json
python step3_retrieve.py --rebuild                     # -> data/embeddings.npy

# ----  Launch the viewer ----
uvicorn sycamore.interface.app:app --reload --port 8001

Open your browser at http://localhost:8001 to run Sycamore live session. Pick a condition and persona, point at your Geranium URL, click Start. Cited interview excerpts render inline; abstention turns are tagged.

⚠️ Notes

What it does

For each synthetic evaluator, Sycamore replays the published Geranium user-study protocol turn by turn against the real Geranium server:

Phase Synthetic-evaluator equivalent
Workflow description One open-ended turn. Grounded answers cite retrieved interview excerpts; ungrounded answers come from generic LLM priors.
Tool description The evaluator reads a textual description of Geranium and reacts.
Hands-on exploration For each of Text, Image, Spec: the evaluator generates queries, the runner submits them to Geranium, the evaluator reacts to the returned top-k triplets.
Closing 1–3 modality ranking with rationale, plus an overall assessment.

Per-evaluator transcripts are written to data/sycamore_outputs/records/<id>.json; a run-level summary with modality aggregates and a theme-alignment scaffold goes to data/sycamore_outputs/summary.{json,md}.

img_3.png

Conditions

CLI

python -m sycamore.cli run \
    --condition {ungrounded|grounded|both} \
    [--n 7]                          # ungrounded evaluator count
    [--queries-per-modality 3]
    [--k 5]                          # top-k results per Geranium query
    [--geranium-url http://localhost:5001]
    [--only CB1,SE2]                 # restrict grounded run to specific abbrs
    [--out data/sycamore_outputs]

Notes & limitations