In English class my teacher handed out a summative. Twenty questions, two minutes, and one instruction at the top: read all the questions before you begin. I panicked and started answering. Question twenty said "flip over your page." That was the entire test, and I had not read it. She was making a point about how easily reading goes wrong and how much depends on getting it right. It stuck with me. Most reading failures are less funny than mine. Patient handouts are supposed to be written at a sixth grade level, and researchers who checked nearly thirty thousand of them found most were written well above the level recommended for them. When a document sits above the person holding it, they do not get a lesson at the end. They just miss what it said. So I built LevelUp Reader. It rewrites any text to the reading level you pick, then measures the result and shows you the level it actually landed on, including when it falls short.

How it works

The trick is that measuring is free. Flesch-Kincaid is arithmetic on two things: how long your sentences are and how many syllables your words have. No model call, no cost, instant. That changes what you can afford to do. Every other tool in this space uses a model to check a model, which is expensive, so they can only afford to flag problems. Mine checks every single attempt, and when it misses it tries again. The retry is the part I did not expect. It does not tell the model what it got wrong. It just asks for a different number. If it aimed at grade 11 and landed at 18.7, the next request asks for grade 6.4, because this model overshoots on this passage. That sounds backwards and it works. On that case the miss went from six grades to a tenth of one.

What went wrong along the way

Three things, and the third is the reason I trust the rest. I built a diagnostic that told the model exactly which lever to move and by how much, then ran it against a control that just said "try again." The simple version won. Showing a model its own failed attempt anchors it to that attempt. I shipped the simple thing and left the diagnostic in the repo as a result rather than deleting it. When I ran it on fifty real pages from heart.org, cancer.org and stroke.org, twenty-two percent of them were quietly getting cut off mid sentence by an output limit I did not know existed. Those fragments measured grade 38, which is obviously wrong. A model asked "is this simpler" would probably have said yes, because the part you can see is simpler. Cheap arithmetic caught a real bug that expensive judgement would have walked straight past. And on a third model, the whole advantage disappeared. The numbers overlap and the loop does not clearly beat a single prompt there. That is in the documentation too, because a result I do not like is still a result.

What I learned That the cheap check is the whole idea, not a shortcut. Because verification costs nothing, it can run on everything. Across the entire evaluation I made 4,269 model calls to generate text and zero to check it. I also learned to test the thing I was most sure about. My best result came from being wrong.

What's next Right now it handles one passage at a time. The version I want is the one where a teacher assigns a single reading and every student opens it at their own level, and nobody stays up rewriting anything.

Full documentation, every prompt, and the raw evaluation data are in the repo.

Built With

Share this project:

Updates

Submission history