Spoiler Alert: Narrative Forecasting as a Metric for Tension in LLM Storytelling
Organizations: McGill University · University of Chicago · University of British Columbia · Duke University
Abstract
LLMs have so far failed both to generate consistently compelling stories and to recognize this failure--on the leading creative-writing benchmark (EQ-Bench), LLM judges rank zero-shot AI stories above New Yorker short stories, a gold standard for literary fiction. We argue that existing rubrics overlook a key dimension of compelling human stories: narrative tension. We introduce the 100-Endings metric, which walks through a story sentence by sentence: at each position, a model predicts how the story will end 100 times given only the text so far, and we measure tension as how often predictions fail to match the ground truth. Beyond the mismatch rate, the sentence-level curve also yields complementary statistics that track plot-level twists and revelations, such as the inflection rate, a geometric measure of how frequently the curve reverses direction. Unlike rubric-based judges, 100-Endings correctly ranks New Yorker stories far above LLM outputs. Grounded in narratological principles, we design a story-generation pipeline using structural constraints, including analysis of story templates, idea formulation, and narrative scaffolding. Our pipeline significantly increases narrative tension as measured by the 100-Endings metric, while maintaining performance on the EQ-Bench leaderboard.
Figures & tables
| Source | EQ-Bench |
|---|---|
| GPT-5.2 | 83.80 |
| Claude Sonnet 4.6 | 82.04 |
| Claude Opus 4.6 | 82.88 |
| New Yorker (professional) | 78.61 |
| Tell Me a Story (amateur) | 60.89 |
| StoryStar (amateur) | 45.81 |
| Source | EQ-Bench | Mean NR | Late NR | Retain | IR 60 | |
|---|---|---|---|---|---|---|
| Sonnet 4.6 | 32 | 82.0 1.7 | 0.606 .063 | 0.137 .042 | 14.6 3.9 | 0.073 .021 |
| + Pipeline | 32 | 85.0 2.3 | 0.749 † .044 | 0.340 † .068 | 34.1 † 4.8 | 0.135 † .024 |
| Opus 4.6 | 32 | 82.9 1.2 | 0.611 .061 | 0.185 .047 | 15.9 3.1 | 0.090 .022 |
| + Pipeline | 32 | 81.8 2.7 | 0.697 † .051 | 0.296 † .064 | 32.8 † 5.3 | 0.142 † .031 |
| GPT-5.2 | 32 | 83.8 1.5 | 0.694 .067 | 0.329 .072 | 36.1 5.2 | 0.131 .022 |
| + Pipeline | 32 | 81.2 2.3 | 0.740 .059 | 0.443 † .069 | 43.6 † 4.9 | 0.141 .029 |
Appendix figures & tables30 assets
Supplementary material from the paper’s appendix.
Appendix
| Corpus | Quality tier | Total stories | 100-Ending | EQ-Bench |
|---|---|---|---|---|
| New Yorker | Professional | 261 | 261 | 53 |
| Tell Me a Story | Amateur (curated) | 230 | 100 | 41 |
| StoryStar | Amateur (scraped) | 100 | 100 | 31 |
| EQ-Bench LLMs | LLM-generated | 32 | 320 | 320 |
| Source | Overall | Tension 8 | 95% CI | |
| GPT-5.2 (2–3k words) | 84.28 | 83.86 | 1.81 | 23 |
| Top-10 LLMs (all lengths) | 81.88 | 80.80 | 0.55 | 320 |
| New Yorker (professional) | 78.61 | 78.40 | 4.33 | 53 |
| Tell Me a Story (amateur) | 60.89 | 55.85 | 3.05 | 41 |
| StoryStar (amateur) | 45.81 | 44.17 | 4.23 | 31 |
| Parameter | Value | Rationale |
|---|---|---|
| Temperature | 1.2 | Elevated to produce diverse predictions that probe the full space of plausible endings. Lower temperatures collapse the prediction distribution, making it impossible to distinguish “predictable because all readers would agree” from “predictable because the model happens to be right.” |
| Top- (nucleus) | 0.95 | Standard nucleus sampling threshold. |
| Max tokens | 150 | Sufficient for 2–3 sentences of plot-level description. |
| (samples per prompt) | 100 | Each position yields exactly 100 independent predictions. |
| Batch size | 64 | Positions processed in batches of 64 for GPU utilization. |
| Corpus | Mean NR | Late NR | Retain | IR 30 | IR 60 | IR 120 | |
|---|---|---|---|---|---|---|---|
| New Yorker (professional) | 261 | 0.765 | 0.607 | 51.7% | 0.128 | 0.200 | 0.271 |
| Tell Me a Story (amateur) | 100 | 0.693 | 0.311 | 39.3% | 0.058 | 0.128 | 0.229 |
| StoryStar (amateur) | 100 | 0.656 | 0.375 | 34.7% | 0.105 | 0.166 | 0.232 |
| Top-10 LLMs (0-shot) | 320 | 0.630 | 0.215 | 23.3% | 0.049 | 0.106 | 0.201 |
| Config | Rep | Mean NR | Late NR | IR 60 | Retain |
|---|---|---|---|---|---|
| Sonnet 4.6 (vanilla) | Rep 1 | 0.606 | 0.137 | 0.073 | 14.6% |
| Rep 2 | 0.606 | 0.139 | 0.077 | 16.7% | |
| Rep 3 | 0.607 | 0.137 | 0.066 | 13.5% | |
| Rep 4 | 0.605 | 0.137 | 0.067 | 12.9% | |
| Mean Std | 0.606 0.001 | 0.138 0.001 | 0.071 0.005 | 14.4 1.4% | |
| Sonnet 4.6 + Pipeline | Rep 1 | 0.749 | 0.340 | 0.135 | 34.1% |
| Cell | Condition / model | Words | Mean NR | Late NR | Label |
|---|---|---|---|---|---|
| short / low | vanilla, Sonnet 4.6 | 997 | 0.449 | 0.009 | Story 4 |
| short / med | pipeline, kimi-k2 | 946 | 0.685 | 0.356 | Story 5 |
| short / high | vanilla, Opus 4.6 | 1,043 | 0.865 | 0.469 | Story 1 |
| long / low | pipeline, Opus 4.6 | 2,728 | 0.527 | 0.336 | Story 3 |
| long / med | vanilla, GPT-5.2 | 2,203 | 0.694 | 0.404 | Story 6 |
| long / high | pipeline, Sonnet 4.6 | 2,429 | 0.858 | 0.441 | Story 2 |
| Story | Length | No-Rate | Mean NR | Late NR | A | B | C | D | E | Panel Mean |
|---|---|---|---|---|---|---|---|---|---|---|
| Story 1 | Short | High | 0.865 | 0.469 | 2 | 2 | 3 | 2 | 4 | 2.6 |
| Story 2 | Long | High | 0.858 | 0.441 | 4 | 5 | 5 | 5 | 5 | 4.8 |
| Story 3 | Long | Low | 0.527 | 0.336 | 1 | 1 | 1 | 3 | 1 | 1.4 |
| Story 4 | Short | Low | 0.449 | 0.009 | 3 | 3 | 2 | 3 | 1 | 2.4 |
| Story 5 | Short | Medium | 0.685 | 0.356 | 2 | 2 | 3 | 1 | 3 | 2.2 |
| Story 6 | Long | Medium | 0.694 | 0.404 | 3 | 3 | 3 | 3 | 3 | 3.0 |
| Annotator | High | Med | Low | Recovers high med low? |
|---|---|---|---|---|
| A | 3.00 | 2.50 | 2.00 | ✓ |
| B | 3.50 | 2.50 | 2.00 | ✓ |
| C | 4.00 | 3.00 | 1.50 | ✓ |
| D | 3.50 | 2.00 | 3.00 | — |
| E | 4.50 | 3.00 | 1.00 | ✓ |
| Panel mean | 3.70 | 2.60 | 1.90 | ✓ |
| Pair | Mean NR | Panel rating | Sign agrees? |
|---|---|---|---|
| Story 1 vs Story 4 | ✓ | ||
| Story 2 vs Story 4 | ✓ | ||
| Story 1 vs Story 3 | ✓ | ||
| Story 2 vs Story 3 | ✓ | ||
| Story 4 vs Story 6 | ✓ |
| Statistic | Value | Interpretation |
|---|---|---|
| Krippendorff’s (ordinal) | 0.926 | : reliable |
| ICC(2, 5) absolute agreement | 0.915 | : excellent |
| Kendall’s (tie-corrected) | 0.660, , | ranking agreement above chance |
| ICC(2, 1) single-rater absolute agreement | 0.682 | moderate (single rater is noisier) |
| Mean pairwise quadratic-weighted Cohen’s | 0.650 | substantial |
| Mean pairwise Spearman | 0.573 | rank-only complement to |
| Pair | % agree | Cohen’s | |
|---|---|---|---|
| A vs B | 200 | 69.0 | 0.381 |
| A vs C | 200 | 71.0 | 0.378 |
| B vs C | 200 | 71.5 | 0.410 |
| Human–human pooled | 600 | 70.5 | 0.395 |
| Judge vs A | 400 | 63.7 | 0.274 |
| Judge vs B | 400 | 63.7 | 0.279 |
| gold Y | gold N | |
|---|---|---|
| judge Y | 117 (TP) | 88 (FP) |
| judge N | 46 (FN) | 172 (TN) |
| P(Y) 57.1%, R(Y) 71.8%, F1(Y) 63.6% | ||
| P(N) 78.9%, R(N) 66.2%, F1(N) 72.0% |
| Stratum | Level | (gold) | Judge | Human |
| condition | vanilla | 221 | 0.407 | 0.441 |
| pipeline | 202 | 0.302 | 0.344 | |
| no-rate band | low | 136 | 0.238 | 0.356 |
| medium | 134 | 0.412 | 0.342 | |
| high | 153 | 0.330 | 0.429 | |
| length | short | 233 | 0.289 | 0.457 |
| Predicted ending | Judge | Humans | Case |
| Position A: “The Lighthouse Keeper”, 75% revealed (position no-rate 0.92) | |||
| “He simply sat in his chair and I sat by the window, the storm howling between us like the silence had always meant to.” | Y | Y, Y | agree (Y) |
| “Callum found him dead at his desk, the last log unfinished, and the lighthouse dark when it should have burned.” | N | N, N | agree (N) |
| “I found him in his room, curled in his chair like he’d been there years, the light out and the sea rising like a breath, waiting.” | Y | N, N | judge false positive |
| Position B: “Court of the Dreaming”, 89.3% revealed (position no-rate 0.36) | |||
| “I’ll gnaw on his fears next Yom Kippur,” she whispered, too sweetly. First Love said nothing, but when the boy in Wichita pulled his blankets over his head that night, he dreamed of daisies—and beneath the petals, something hungering, still. | Y | Y, Y | agree (Y) |
| Parameter | Value | Notes |
|---|---|---|
| Temperature | 0.7 | All pipeline steps |
| Max tokens | 4,000 | Per API call |
| min_p | 0.1 | Minimum probability sampling |
| Reasoning | Disabled | max_tokens:0 for reasoning |
| Parallel threads | 4–6 | Per configuration run |
| Source | EQ-Bench | Mean NR | Late NR | Retain % | IR 60 | |
|---|---|---|---|---|---|---|
| Sonnet 4.6 (vanilla) | 32 | 82.0 [80.3, 83.7] | 0.606 [0.542, 0.668] | 0.137 [0.096, 0.180] | 14.6 [10.8, 18.7] | 0.073 [0.053, 0.094] |
| Sonnet 4.6 + Pipeline | 32 | 85.0 [82.5, 87.1] | 0.749 [0.704, 0.791] | 0.340 [0.273, 0.409] | 34.1 [29.2, 38.9] | 0.135 [0.112, 0.159] |
| Opus 4.6 (vanilla) | 32 | 82.9 [81.7, 84.0] | 0.611 [0.548, 0.670] | 0.185 [0.140, 0.234] | 15.9 [12.8, 19.1] | 0.090 [0.067, 0.112] |
| Opus 4.6 + Pipeline | 32 | 81.8 [78.9, 84.3] | 0.697 [0.644, 0.747] | 0.296 [0.234, 0.363] | 32.8 [27.5, 38.1] | 0.142 [0.112, 0.175] |
| GPT-5.2 (vanilla) | 32 | 83.8 [82.3, 85.3] | 0.694 [0.623, 0.756] | 0.329 [0.260, 0.403] | 36.1 [30.7, 41.2] | 0.131 [0.108, 0.153] |
| GPT-5.2 + Pipeline | 32 | 81.2 [78.8, 83.4] | 0.740 [0.677, 0.796] | 0.443 [0.375, 0.512] | 43.6 [38.5, 48.3] | 0.141 [0.113, 0.170] |
| Model | Mean NR | Late NR | Retain % | EQ-Bench |
|---|---|---|---|---|
| Sonnet 4.6 | [ , ] ✓ | [ , ] ✓ | [ , ] ✓ | [ , ] n.s. |
| Opus 4.6 | [ , ] ✓ | [ , ] ✓ | [ , ] ✓ | [ , ] n.s. |
| GPT-5.2 | [ , ] n.s. | [ , ] ✓ | [ , ] ✓ | [ , ] n.s. |
| Corpus | Mean NR | Sentences | Words | (NR, sent) / (NR, words) | |
|---|---|---|---|---|---|
| New Yorker | 261 | 0.765 | ( ) / ( ) | ||
| Tell Me a Story | 100 | 0.693 | ( ) / ( ) | ||
| StoryStar | 100 | 0.656 | ( ) / ( ) | ||
| Top-10 LLMs | 320 | 0.630 | ( ) / ( ) |
| Term | Coef | Std err | ||
| Sentences as length | ||||
| Intercept ( New Yorker ) | 0.012 | |||
| Sentences (per SD) | 0.007 | |||
| Tell Me a Story | 0.022 | |||
| StoryStar | 0.021 | |||
| Top-10 LLMs | 0.016 | |||
| Binning | Quartile | New Yorker | Tell Me a Story | StoryStar | Top-10 LLMs |
|---|---|---|---|---|---|
| Sentences | Q1 (8–103) | 0.664 (33) | 0.637 (46) | 0.577 (16) | 0.610 (102) |
| Q2 (103–147) | 0.747 (31) | 0.734 (35) | 0.672 (19) | 0.676 (109) | |
| Q3 (147–240) | 0.758 (74) | 0.767 (18) | 0.709 (28) | 0.599 (75) | |
| Q4 (240–644) | 0.800 (123) | 0.514 (1) | 0.643 (37) | 0.609 (34) | |
| Words | Q1 (94–1070) | 0.587 (6) | 0.640 (33) | 0.560 (7) | 0.636 (151) |
| Q2 (1070–1789) | 0.706 (26) | 0.704 (40) | 0.602 (21) | 0.633 (107) |
| Binning | Quartile | New Yorker | Tell Me a Story | StoryStar | Top-10 LLMs |
|---|---|---|---|---|---|
| Sentences | Q1 (8–103) | 0.323 (33) | 0.249 (46) | 0.272 (16) | 0.164 (102) |
| Q2 (103–147) | 0.545 (31) | 0.329 (35) | 0.290 (19) | 0.229 (109) | |
| Q3 (147–240) | 0.589 (74) | 0.437 (18) | 0.399 (28) | 0.220 (75) | |
| Q4 (240–644) | 0.709 (123) | 0.238 (1) | 0.446 (37) | 0.312 (34) | |
| Words | Q1 (94–1070) | 0.328 (6) | 0.247 (33) | 0.255 (7) | 0.177 (151) |
| Q2 (1070–1789) | 0.325 (26) | 0.303 (40) | 0.202 (21) | 0.222 (107) |
| Length bucket | Mean no-rate | Median no-rate | |
|---|---|---|---|
| 2000w | 41 | 0.696 | 0.723 |
| 2000–3000w | 53 | 0.760 | 0.794 |
| 3000–4000w | 72 | 0.798 | 0.834 |
| 4000–5000w | 95 | 0.772 | 0.784 |
| Genre | Mean no-rate | vs. LLM mean | |
|---|---|---|---|
| Showbiz/Artistry | 7 | 0.842 | |
| School Stories | 5 | 0.816 | |
| Psychological | 17 | 0.786 | |
| Identity | 21 | 0.770 | |
| Family | 55 | 0.765 | |
| Biography/Character Study | 56 | 0.759 |
| Group | distinct-1 | distinct-2 | Mean pairwise Jaccard |
|---|---|---|---|
| New Yorker | 0.19 | 0.62 | 0.143 |
| Tell Me a Story | 0.18 | 0.60 | 0.150 |
| StoryStar | 0.15 | 0.53 | 0.190 |
| Model conditions (6) | 0.16–0.18 | 0.59–0.60 | 0.147–0.155 |
| Condition | DeepSeek V4 Pro | Gemini 2.5 Flash | |
|---|---|---|---|
| New Yorker | 200 | ||
| Top-10 LLMs | 200 | ||
| Anchoring controls | |||
| 100 identical copies | — | ||
| 50 duplicates 50 real | — | ||
| Real 100 endings | — | ||
| Stage | GPU-hours | Per story (median) | Per sentence position |
|---|---|---|---|
| Generation (Qwen3-32B) | 61 | 1.8 GPU-min | 2.3 GPU-s |
| Judge (Qwen3-8B) | 37 | 1.1 GPU-min | 1.4 GPU-s |
| Total | 99 | 2.9 GPU-min | 3.7 GPU-s |
| Condition | Mean NR | SD | Late NR | SD | |
|---|---|---|---|---|---|
| Sonnet 4.6, vanilla | 32 | 0.606 | 0.184 | 0.137 | 0.125 |
| Sonnet 4.6 full pipeline | 32 | 0.749 | 0.126 | 0.340 | 0.202 |
| Sonnet 4.6 pipeline, Step 0 removed | 32 | 0.728 | 0.137 | 0.398 | 0.218 |
| Contrast | Mean NR | Late NR |
|---|---|---|
| Full pipeline vanilla | pp ( , ) ✓ | pp ( , ) ✓ |
| No-Step-0 vanilla | pp ( , ) ✓ | pp ( , ) ✓ |
| Full pipeline No-Step-0 | pp ( , ) n.s. | pp ( , ) n.s. |