Context
The provider set is Dartmouth Chat + HuggingFace only (decided 2026-08-21; ADR 0001). HuggingFace support means the hosted Inference API, not the local transformers inference in integrations/huggingface_model.py / lazy_huggingface_model.py — those stay in the frozen layer and retire under #430.
What to build
A HuggingFaceProvider in the canonical layer (models/providers/), speaking the Inference API over HTTP with aiohttp (already a core dependency — same shape as DartmouthProvider, no new core deps, no provider extra required unless the SDK is used).
- Text-generation against a small set of served models, selected from the live catalog rather than a hard-coded list (two rounds of hard-coded Anthropic ids were wrong; do not repeat that here).
HF_TOKEN from the environment or ~/.orchestrator/.env, same as other credentials.
- Free-tier vs paid distinction must fail closed: a model the token cannot serve must raise, not silently route elsewhere. Model fallback across providers does not exist (ADR 0001).
- Registered in the normal model registry when a credential is present, so pipelines can select the models without touching the provider directly.
Acceptance criteria
Out of scope
Related: #429 (adapter-layer consolidation — this provider lands in models/providers/), #430 (retirement of the frozen layer), ADR 0001 provider policy.
Context
The provider set is Dartmouth Chat + HuggingFace only (decided 2026-08-21; ADR 0001). HuggingFace support means the hosted Inference API, not the local transformers inference in
integrations/huggingface_model.py/lazy_huggingface_model.py— those stay in the frozen layer and retire under #430.What to build
A
HuggingFaceProviderin the canonical layer (models/providers/), speaking the Inference API over HTTP withaiohttp(already a core dependency — same shape asDartmouthProvider, no new core deps, no provider extra required unless the SDK is used).HF_TOKENfrom the environment or~/.orchestrator/.env, same as other credentials.Acceptance criteria
live-huggingfacejob inlive-tests.yml, mirroringlive-dartmouth: hard-fails whenHF_TOKENis missing underORCHESTRATOR_REQUIRE_LIVE=1, and fails when every test skips.generate()returns non-empty content,models.list()/discovery works,health_check()works.Out of scope
text-generation-inferenceself-hosting, Inference Endpoints (dedicated), and any SDK dependency in core.Related: #429 (adapter-layer consolidation — this provider lands in
models/providers/), #430 (retirement of the frozen layer), ADR 0001 provider policy.