Praneshrajan15's picture
Deploy DataForge playground API
13fe504 verified
Raw
History Blame Contribute Delete
1.44 kB
"""A repairer that defers to a fallback when its primary abstains.
Used to give issue classes with a precise deterministic repairer (e.g.
missing_value's functional-dependency fill) a second chance via the LLM
corrector *only when* the deterministic repairer returns ``None``. The
deterministic proposal always wins when it exists, so the precise, byte-stable
path is never displaced; the corrector only fills the gaps the deterministic
layer cannot.
"""
from __future__ import annotations
from dataforge.detectors.base import Issue, Schema
from dataforge.repairers.base import ProposedFix, Repairer, RetryContext
from dataforge.table import TableLike
class FallbackRepairer:
"""Try ``primary`` first, then ``fallback`` when it abstains."""
def __init__(self, primary: Repairer, fallback: Repairer) -> None:
self._primary = primary
self._fallback = fallback
def propose(
self,
issue: Issue,
df: TableLike,
schema: Schema | None,
retry_context: RetryContext | None = None,
) -> ProposedFix | None:
"""Return the primary proposal, or the fallback's when primary abstains."""
primary_fix = self._primary.propose(issue, df, schema, retry_context=retry_context)
if primary_fix is not None:
return primary_fix
return self._fallback.propose(issue, df, schema, retry_context=retry_context)