Skip to content

code-gen P4.4: serve a HuggingFace model reference as a routing target #42

Description

@gotoplanb

Part of #22 · Tags: [Cognitive] [Agnostic] · Supersedes the cross-host slice of #32 · Deferred (see trigger below)

Let a routing rule point preferred_model / eval_shadow_models at a HuggingFace model repo; Conduct resolves it, stages it locally, and serves it through the same swap/dispatch path as a named local model.

- task_type: code_generation
  preferred_model: gemma4:e4b                                   # local tags still work
  eval_shadow_models:
    - { model: gemma4:12b, rate: 1.0 }
    - { model: "huggingface://gotoplanb/gemma-e4b-wander-dpo@<rev>", rate: 1.0 }

Framing — identity-agnostic (this is the whole point)

Conduct does not know or care whether a referenced model is "ours," a fine-tune, or a stranger's repo. huggingface://gotoplanb/gemma-e4b-dpo@v3 and huggingface://google/gemma-3-4b-it are the same kind of thing — a model source to resolve and serve. There is no special "register our checkpoint" handshake.

This dissolves the cross-host push problem the original version of this issue carried: with Conduct + Wander on separate hosts, there is nothing to push into Conduct. The handoff is one-directional and clean:

Wander: pull DPO data (client key, #41) → train → PUBLISH checkpoint to HF   (client's job)
Conduct: routing rule references huggingface://<repo>@<rev> → PULL + serve    (just a model source)

So this is a generic capability ("serve any HF model"), not a fine-tune-registration feature — same path a future user would use to point Conduct at any community model. Responsibilities: Conduct produces data + serves models; the client owns training + publishing. (Publishing to HF is never Conduct's job.)

Acceptance

  • A rule referencing huggingface://<repo>@<rev> resolves and the worker dispatches to it.
  • @<rev> is honored (pin to a commit for reproducible benches).
  • model_used echoes the repo@rev string so downstream tools group by it.
  • A failed pull (404 / auth / transient) surfaces in the job's error — never silently falls back to the primary.
  • Private-repo pulls use Conduct's own HF_TOKEN (env), not client creds.
  • One test: register a small public HF model, run one job through it, assert the result.

Open design questions (settle at build time)

  • Revision pinning: SHA only (immutable) vs also tag refs (mutable on HF). Lean SHA for reproducible lift reports.
  • Quantization: HF repos can ship multiple weights (bf16, q4_k_m…). Reference syntax to pick one — e.g. ...@<rev>#q4_k_m.
  • Caching: lazy on first request vs pre-warm on routing-config load; keep a local mirror of pulled snapshots.

Why deferred

No checkpoint exists to serve yet (wander#7 hasn't run). Trigger: build this when wander#7 produces a checkpoint and wander#8 needs it benched — at that point the exact repo/rev, format, size, and quant are known, so the design questions above answer themselves.

Related

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions