emealia docs · internal 2026-09-09

The tech

emealia uses a model for language and forbids it arithmetic. The numbers come from a curated database of official national food-composition data. This page keeps only what proves that architecture is right, not merely different: two named German findings, one measured error rate, and the reason a chat interface was rejected.

8 September 2026 · condensed from the earlier tech/AI pages · architecture read from release/epic-29

1 · The pipeline, in one table

StageWhat happensWho decides
ParseFree text becomes a structured list — food, preparation, amount. The prompt: “Do not return nutrient values, ranges, confidence levels.”Model, language only
ResolveEach item is matched against the curated reference tier — five usable official sources today (FDC, BLS, CIQUAL, CNF, Swiss; four more are licence-gated and not yet live).Database
Estimate — misses onlyFoods the database does not know go back to the model, which returns per-100 g min/max ranges for every nutrient (estimate_ingredient_nutrition). This call sees only the food identity — never the user, the amount, the meal, or the sentence. The result is written to a quarantine table, never into reference data, and shown to the user marked as an AI estimate pending human research.Model — numbers
PromoteA human researches a quarantined candidate and promotes it into ingredient_reference. Promotion is terminal and never overwrites the frozen candidate composition, so re-running it is a safe no-op.Human
ComposePer-100g ranges × grams, summed, with a ±10% honesty floor applied in code and preserved through aggregation.Code

2 · The two findings that make this concrete

Germany has already tested both failure modes and published the results

Stiftung Warentest tested ChatGPT, Copilot and Gemini generating nutrition plans. Copilot proposed roughly 1,390 kcal/day — a four-to-seven-year-old’s requirement — for an adult, with inadequate calcium. Gemini undershot by 500 kcal on average. This is what happens when a model supplies the number: the “AI alone” failure mode on best of both worlds.

Ernährungs Umschau (2017) compared consumer nutrition-app values against the Bundeslebensmittelschlüssel, Germany’s own official reference — the same family five of emealia’s adapters draw from — and found individual nutrients deviating by more than 50%. This is what happens when a database exists but nothing checks the app against it: the “database alone” failure mode.

emealia’s architecture answers both, differently: where the food is in the database, the numbers come from the same reference family Ernährungs Umschau used as ground truth and the model never supplies a value. Where it is not, the model does estimate the composition — and that case is labelled as an AI estimate to the user, quarantined out of reference data, and queued for human research. So the Warentest failure mode is not eliminated; it is bounded and disclosed, which is a weaker but honest claim. Whether any competitor makes both claims is unchecked — the negative-existence claims in this document set have a poor record (see claims), so it is stated here only as what emealia’s architecture does, not as a comparison.

3 · Why not a chat interface

The obvious cheap alternative is a chat window. Rejected for a measurable reason: writing a good instruction is a skill, and most people don’t have it. Jakob Nielsen’s articulation barrier, drawn from OECD literacy data, estimates 10–20% of adults write well enough to drive a prompt-only interface, and recommends hybrid interfaces pairing prose with structure — which is emealia’s shape, arrived at independently. An untuned LLM estimating nutrition from text alone has a mean absolute error of 652 kcal per meal — roughly a third of a day. Forbidding the model arithmetic is the direct fix.

4 · Semantic determinism — a schema is not a guarantee

Constrained decoding guarantees a response parses; it does not guarantee it is true. emealia has already paid for the gap once: a token limit set too low truncated a structurally valid response before its final field, so every meal failed and retried at real cost. The schema was never violated; the answer was still wrong. What actually carries the truth claim is downstream of the schema — values from a database, check constraints, the range floor, a coverage harness — never the fact that the JSON parsed.

5 · What is not proven

emealia has no accuracy figure of its own. The G2 calibration gate — 30 real meals, correction rate below 40% — is still open. Everything above is an argument that the architecture is built the way the evidence says it should be, which is a genuinely strong and genuinely different claim from “emealia is accurate.” The distinction must survive into any public copy.

Sources