---
title: Singulars - evolution
url: https://www.halimmadi.com/singulars/evolution
description: "Machine vs me, over time: how often the room prefers the machine's poem, what each side got better at, and what was shipped between shows."
generated: 2026-10-19
---

# evolution

## evolution.txt

machine vs me, over time

**about 3 in 10**

That is how often the room preferred the machine's poem over mine: about 30% of 48 poem pairs across 7 shows (likely between 20% and 41%).

The latest show is not in this number yet.

At every show the room reads two poems on one theme, one by me and one by a machine trained on the shows before, and votes without knowing which is which. The passing index is the machine's share of those verdicts, a tie counting half: at 50% the room cannot tell us apart, and the machine is not there yet.

No poem is labelled human or machine here or anywhere on this site. What this page shows is each night's count, once the show is closed, and a night whose count would name its poems is withheld.

## passing-index.svg

how often the room prefers the machine's poem

One line over the reps: the machine's share of every pair so far, with its 90 percent band. 50 percent is where the room cannot tell.

- rep 2 · reinforcement.exe: about 30% (likely between 16% and 46%), over 22 pairs from carnation.exe to reinforcement.exe
- rep 3 · versus.exe: about 30% (likely between 17% and 44%), over 29 pairs from carnation.exe to versus.exe
- rep 4 · hard.exe: about 30% (likely between 18% and 43%), over 33 pairs from carnation.exe to hard.exe
- rep 7 · recover.exe: about 30% (likely between 20% and 41%), over 48 pairs from carnation.exe to recover.exe

Next: rep 9 · tame.exe. Not performed yet.

## verdict-by-show.svg

the room's verdict, show by show

Across 5 shows and 37 pairs, the room preferred the machine's poem 10 times, mine 24 times, and could not decide 3 times. On the nights with a published share, about 40% of the votes went to the machine. 3 nights are withheld (15 pairs, 2 ties): next to the votes each theme page shows, that split would name every poem of the night.

- rep 1 · carnation.exe: 4 pairs: the room preferred the machine's poem in 2, mine in 2, and could not decide in 0. 100 votes that night; the split is not published.
- rep 2 · reinforcement.exe: 18 pairs: the room preferred the machine's poem in 4, mine in 12, and could not decide in 2. 436 votes that night; the split is not published.
- rep 3 · versus.exe: 7 pairs: the room preferred the machine's poem in 1, mine in 6, and could not decide in 0. About 40% of the night's 190 votes went to the machine.
- rep 4 · hard.exe: 4 pairs: the room preferred the machine's poem in 1, mine in 3, and could not decide in 0. 157 votes that night; the split is not published.
- rep 5 · reverse.exe: 7 pairs, 1 tie. The split is withheld: next to the votes each theme page shows, that split would name every poem of the night. 102 votes that night; the split is not published.
- rep 6 · frontière.exe: 3 pairs, 0 ties. The split is withheld: next to the votes each theme page shows, that split would name every poem of the night. 56 votes that night; the split is not published.
- rep 7 · recover.exe: 5 pairs, 1 tie. The split is withheld: next to the votes each theme page shows, that split would name every poem of the night. 96 votes that night; the split is not published.
- rep 8 · pass.exe: 4 pairs: the room preferred the machine's poem in 2, mine in 1, and could not decide in 1. 33 votes that night; the split is not published.

| rep | pairs | machine | me | ties | votes | machine share |
| --- | --- | --- | --- | --- | --- | --- |
| 1. carnation.exe | 4 | 2 | 2 | 0 | 100 | n/a |
| 2. reinforcement.exe | 18 | 4 | 12 | 2 | 436 | n/a |
| 3. versus.exe | 7 | 1 | 6 | 0 | 190 | ~40% |
| 4. hard.exe | 4 | 1 | 3 | 0 | 157 | n/a |
| 5. reverse.exe | 7 | withheld | withheld | 1 | 102 | n/a |
| 6. frontière.exe | 3 | withheld | withheld | 0 | 56 | n/a |
| 7. recover.exe | 5 | withheld | withheld | 1 | 96 | n/a |
| 8. pass.exe | 4 | 2 | 1 | 1 | 33 | n/a |
| published rows | 39 | 10 | 24 | 5 | 1170 | ~40% |

Straight from the room: no judges, no models. A pair goes to whichever poem got more votes on the night; a tie is a tie.

A withheld row keeps its pair, tie and vote counts; its split is not published because next to the votes each theme page shows, that split would name every poem of the night.

## skills.svg

the machine and me · what improved from one rep to the next

The machine: 40 out of 100 at reps 1+2, 85 at 7.

Me: 60 out of 100 at reps 1+2, 60 at 7.

Scores are rounded averages from 3 AI judges reading the archived poems against rubric v2-2026-09-21. They describe whole nights, never a single poem, and they measure what these rooms have rewarded, not what a poem is worth.

## log.txt

what i shipped before each rep

### 1. carnation.exe

may 2025 · Paris and Barcelona

- The first machine: a small OpenAI model (gpt-4.1-nano) fine-tuned on a poetry corpus, once in French and once in English.
- A long system prompt naming a pantheon of poets. The French set is public on Hugging Face (madihalim/carnation-fr).

### 2. reinforcement.exe

november 2025 · DevConnect, Buenos Aires

- A new gpt-4.1-nano fine-tune on a larger English corpus.
- Poems the room had preferred at earlier shows were folded back into the training data: the series starts feeding itself.

### 3. versus.exe

november 2025 · Mozilla AI residency, San Francisco

- A second version of the English carnation fine-tune, on a revised dataset.
- The prompt moved to English only.

### 4. hard.exe

december 2025 · TIAT, San Francisco

- A new gpt-4.1-nano fine-tune, hard-eng. Its dataset is public (madihalim/hard-eng).
- Other poets' work joined the corpus, so the machine stopped learning from one voice only.

### 5. reverse.exe

march 2026 · Media Archaeology Lab, Boulder

- No new training run on record for this rep: the machine most likely carried over from hard.exe.
- After the show the separate show sites were folded into this one platform, so every rep now lives in one archive.

### 6. frontière.exe

may 2026 · Index Space, Brooklyn

- An evaluation harness, and a rubric of what this audience rewards, read out of the archive and scored by a council of AI judges.
- Four preference fine-tunes (DPO) on 33 audience pairs. Offline, none of them matched a frontier model given a rich prompt and a few past pairs.
- Shipped that instead: Claude Opus 4.7, a rich prompt, five past pairs in context and a strict length cap.

### 7. recover.exe

june 2026 · Porto, performed remotely

- Six in-context pairs instead of five, and the base model moved to Claude Opus 4.8.
- A gpt-4.1 preference fine-tune retrained on 36 pairs as a control. Offline it scored below the in-context approach.
- A remote stage and control system, two-step voting, vote undo and a sandbox mode for rehearsal.

### 8. pass.exe

september 2026 · UN General Assembly week, New York

- The prompt moved server-side into a private recipe. The machine now checks its own tells, form and stock words, and rewrites before it answers.
- The base model was chosen by a seven-model bake-off scored on detectability, not on judge taste. No fine-tune this time.
- The audience rubric was rebuilt author-blind (v2). This page gained the passing index, the night-by-night verdict and this log.

### 9. before tame.exe

october 2026 · MozFest, Barcelona · next

- The self-check became a bar, not a target: three drafts at once, the tells only decide pass or fail, and the pick is the draft least like the night's earlier poems.
- The recipe became versioned blocks the poet edits himself, with a compare page to hear several models on one theme and a knobs panel for what each model still lets you turn.
- Every machine poem is logged with its served model, recipe version, knob values and drafts, so an off-recipe poem cannot pass unnoticed again.

## for-the-curious/

method, rubric, judges, models

### how the passing index is computed

One unit is one poem pair. The machine scores 1 when its poem got more votes, a half on a tie, 0 otherwise. The value shown is the average of that score with one imagined win and one imagined loss added (a flat Beta(1,1) prior), and the shaded band is where the true rate sits with 90% probability.

Only closed shows count, so the page never moves during a live show. A point is drawn once the series covers at least 12 pairs from at least 2 shows. The counts behind every point are in the verdict chart.

### the rubric and the judges

The skills come from a rubric read out of the archive: an AI model compared the poems the room preferred with the ones it did not, across 44 decided pairs, and named what separates them. The framing and the calibration are mine. A panel of 3 judges (gemini-3.8-flash, gpt-6-astra, kimi-k3) then scored every archived poem from 0 to 5 on each skill.

- everyday words (plain_words · Everyday words · weight 2.4)
- metaphors that earn their place (images_cohere · Metaphors that earn their place · weight 3)
- easy to follow on one hearing (followable · Followable in one hearing · weight 2.5)
- good to hear out loud (sound · Pleasing to the ear · weight 2.3)
- a feeling anyone can name (feeling_named · A feeling anyone can name · weight 2.5)
- room for the listener's own life (relatable · Room for the listener · weight 1.8)
- an ending that settles (closure · An ending that settles · weight 1.3)

Rubric version v2-2026-09-21. AI judges describe what these rooms have rewarded; they do not predict the room. Checked against the real votes, no judge did better than simple rules of thumb.

### every skill, every rep

the machine

| skill | 1+2 | 3+4 | 5+6 | 7 |
| --- | --- | --- | --- | --- |
| everyday words | 3.0 | 3.0 | 3.5 | 4.5 |
| metaphors that earn their place | 1.5 | 1.5 | 2.5 | 4.0 |
| easy to follow on one hearing | 1.5 | 2.0 | 3.0 | 4.5 |
| good to hear out loud | 2.5 | 2.5 | 3.0 | 4.0 |
| a feeling anyone can name | 2.0 | 2.5 | 2.5 | 3.5 |
| room for the listener's own life | 2.0 | 2.0 | 2.5 | 3.5 |
| an ending that settles | 2.0 | 2.5 | 3.5 | 4.5 |
| all together, out of 100 | 40 | 45 | 55 | 85 |

me

| skill | 1+2 | 3+4 | 5+6 | 7 |
| --- | --- | --- | --- | --- |
| everyday words | 3.5 | 3.5 | 4.0 | 3.5 |
| metaphors that earn their place | 2.5 | 2.5 | 2.5 | 3.0 |
| easy to follow on one hearing | 3.0 | 2.5 | 3.0 | 3.0 |
| good to hear out loud | 3.0 | 2.5 | 2.5 | 3.0 |
| a feeling anyone can name | 3.5 | 3.0 | 3.0 | 2.5 |
| room for the listener's own life | 3.0 | 3.0 | 2.5 | 2.5 |
| an ending that settles | 3.0 | 3.0 | 2.5 | 3.5 |
| all together, out of 100 | 60 | 55 | 60 | 60 |

Columns are rep numbers; 1+2 means two reps pooled, because a side is only averaged over at least 5 poems. Scale 0 to 5, rounded to the nearest half. * scored by fewer judges than the others.

### which machine gets sent on stage

Before a show, candidate machines write on the themes of reverse.exe and a panel of AI judges (gpt-5, gpt-5+claude-opus-4-7+deepseek-r1) scores them against the rubric. This is an in-sample score: the rubric was read out of the same archive the candidates are scored on, so it is not a held-out test. It also did not predict the room: a high score here has not meant more votes on the night.

- A large general model with a short brief (Claude Opus 4.7 · 7 themes): 0
- A large general model, shown past poem pairs before it writes (Claude Opus 4.7 (rich + in-context DPO) · 7 themes): 0
- A large general model, shown past poem pairs before it writes (frontière.exe (Claude 4.8 + in-context DPO) · 7 themes): 0
- A model retrained on the room's past votes (frontiere.exe (v1 - 4.1 DPO control) · 7 themes): 0
- A large general model, shown past poem pairs before it writes (Gemini 3.1 Pro (rich + in-context DPO) · 7 themes): 0
- A large general model with a detailed brief (gpt-4.1 (base + rich prompt) · 7 themes): 0
- A model retrained on the room's past votes (reverse.exe (v1 - 4.1 DPO) · 7 themes): 0

Judge score out of 100. Higher is closer to the rubric.
