affaan-m/ECC · error · ProviderDisabledError
live distillation requires explicit separately authorized…
Error message
live distillation requires explicit separately authorized execution; this package ships no provider adapters and performs no network calls. Use distill_local() (offline, deterministic, dry-run) instead.
What it means
distill_live exists solely to fail closed: this package ships no provider adapters and performs no network calls, so any attempt at live (provider-backed) distillation raises ProviderDisabledError immediately. The message directs you to distill_local(), the offline deterministic dry-run path.
Solutions
- Replace distill_live(profile) with distill_local(profile) — offline, deterministic, dry-run
- Remove any code paths/config expecting live provider execution from this package
- If live distillation is truly required, use a different package that ships provider adapters; do not monkey-patch this one
Example fix
// before from tasteforge.distill import distill_live spec = distill_live(profile) // after from tasteforge.distill import distill_local spec = distill_local(profile)
Defensive patterns
Strategy: try-catch
Validate before calling
from tasteforge.distill import distill_live
def live_supported() -> bool:
return False # this package never supports live distillation Try / catch
from tasteforge.distill import ProviderDisabledError, distill_local
try:
spec = distill_live(profile)
except ProviderDisabledError:
spec = distill_local(profile) # offline, deterministic fallback Prevention
- Call distill_local directly; treat distill_live as a permanent guard
- Never assume an API key or env var enables live mode in this package
- Document in calling code that this package is dry-run only
When it happens
Trigger: Directly invoking tasteforge.distill.distill_live(profile) — always, unconditionally, by design. There is no flag, env var, or config that enables it.
Common situations: Migrating code from a different package that had a working live path, assuming an API key or provider flag would enable live mode, or copy-pasting a call chain from another tool.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- provider is not available: provider generation in…
- AuraUntrusted
- orch-review: args.changedFiles must be an array of paths
- orch-review: args.changedFiles must contain only string…
- orch-review: args.diff must be a non-empty unified diff
AI-assisted analysis of affaan-m/ECC@8321021c54 (2026-09-16).
Data as JSON: /api/errors/b75afe1986ed0e8b.
Report an issue: GitHub.
Appendix: source
Thrown at skills/taste-application/scripts/tasteforge/distill.py:113
if sp is not None:
grade = sp.read_json(sp.grade_path)
cadence = sp.read_json(sp.cadence_path)
grounding_text = grounding_from_grade(grade, cadence)
grounding_used = bool(grounding_text)
spec = build_spec(
look,
pack_name=sp.name if sp is not None else profile.get("genre"),
grounding_used=grounding_used,
)
if grounding_text:
spec["grounding"] = grounding_text
return spec
def distill_live(profile: dict[str, Any]) -> dict[str, Any]:
"""Refuse live provider distillation. Fails closed, always."""
raise ProviderDisabledError(_FAIL_CLOSED)
def grounding_from_grade(grade: dict[str, Any], cadence: dict[str, Any]) -> str:
"""Measured ground truth as a factual preamble (canonicalized port).
Numeric facts belong here, not in the model's judgment: the first
ungrounded run of the recovered pipeline produced a spec asserting "no
apparent color grading" for a reference measuring a*+24.9 in the
midtones. Stating measurements as facts inverts the dependency.
"""
if not grade:
return ""
lines = [
"MEASURED GROUND TRUTH for this reference set, from numeric analysis "
"of the sampled frames. These are FACTS. Do not contradict them. Do "
"not describe this footage as neutral, ungraded, or clinical:",
]View on GitHub (pinned to 8321021c54)