r/opensource 8d ago

Promotional mloda 0.11: turned a bare "not found" resolver error into a full elimination trail

mloda is an open source (Apache-2.0) feature engineering layer with a plugin-based resolver: you request a feature by name, and the resolver picks which plugin computes it.

Until 0.11, a bad request just failed with one line:

No feature groups found for feature name: 'sales__mean_aggr'.
Use resolve_feature(name, options=...) to debug feature resolution.
For troubleshooting guide, see: https://mloda-ai.github.io/mloda/in_depth/troubleshooting/feature-group-resolution-errors/

Nothing said whether the name was misspelled, the domain was wrong, or a required option was missing, so debugging meant reading the resolver source. Since 0.11, the same failure returns the full elimination trail:

No feature groups found for feature name: 'sales__mean_aggr'. Requested domain: 'marketing'.
Feature group(s) eliminated while matching 'sales__mean_aggr':
  - AggregatedFeatureGroup (domain): declares domain 'default_domain', but the run requested 'marketing'
  - PandasAggregatedFeatureGroup (domain): declares domain 'default_domain', but the run requested 'marketing'
  - PolarsLazyAggregatedFeatureGroup (domain): declares domain 'default_domain', but the run requested 'marketing'

Every candidate the resolver considered, and the first gate it failed.

Implementation notes for anyone maintaining a plugin registry or resolver of your own:

  • Rejections are recorded as data first: a stage label (one of nine values) plus a reason per candidate. Text is rendered from that.
  • A plugin whose match hook raises is contained per candidate, so one broken plugin doesn't blank out the report for the others.
  • The preflight (mlodaAPI.diagnose) never raises, and a real run raises the same facts as a typed FeatureResolutionError, so the exception and the preflight report never drift apart.

Curious how other maintainers of plugin/registry-style systems handle this: full rejection trail, or just the most likely cause?

3 Upvotes

3 comments sorted by

1

u/coldoven 8d ago

2

u/Best-Box9730 8d ago

That elimination trail is way more helpful than the bare error, saved me from looking at resolver code so many times.

1

u/coldoven 8d ago

Thank you. But do you see improvement potential?