Skip to content

Reducer vs parser vs metric boundaries

What it is: the responsibility split between choosing a candidate, normalizing it, and assigning a score.

When it matters: whenever a custom component feels overloaded or two components seem to be solving the same problem.

What you provide:

  • reducers that choose or synthesize a reduced candidate
  • parsers that normalize reduced output
  • metrics that score parsed subjects

What Themis provides: stage ordering and typed inputs to each stage.

Use this responsibility map when one component starts doing work that belongs to the next stage.

flowchart LR
    A["Candidate set"] --> B["Reducer"]
    B --> C["Reduced candidate"]
    C --> D["Parser"]
    D --> E["Parsed subject"]
    E --> F["Metric"]
    F --> G["Score or judgment output"]

Reducers choose, parsers normalize, and metrics judge; crossing those boundaries is usually the source of design confusion.

What to inspect when it goes wrong: check whether the component is changing data in the wrong stage or relying on information it should not own.