Skip to content

feat: allow a companion weight to come from a different Hugging Face repo #199

Description

@outofcoffee

outfit remote deploy can carry a companion weight — a speculative drafter, an mmproj — to the cloud, but only from the model's own repo. parseCompanions rejects any value containing / (remote/lambda/shared/deploy-config.ts:255), buildSeedJob carries a single modelId (seed/launch.ts:96), applySelection resolves the companion inside that one repo's listing (seed/contract.ts:273), and companionsFrom reduces the preset value to its basename (cmd/outfit/remote.go:1347).

That holds for Muse-Glimmer, whose DFlash drafter ships beside its weights. It does not hold in general.

Example: DFlash2 on Qwen3.8-27B

The base weights are ggml-org/Qwen3.8-27B-GGUF:Q4_K_M (19 GB); the drafter is published separately as incoai/Qwen3.8-27B-DFlash2-GGUF (1.1 GB at Q4_K_M). Both fit an L40S alongside a 128k q8 KV cache, and llama.cpp has carried DFlash2 since b10658 — but the drafter cannot be seeded, so the endpoint has to run without it.

Neither workaround is attractive. Mirroring both files into one repo means owning a 20 GB copy. Letting --spec-draft-hf pass through to llama-server reintroduces a Hugging Face fetch at engine start — unpinned, absent from _seed.json, and repeated on every fresh launch, which is the dependency the S3 seed exists to remove.

Proposal

Let a companion name its own repo. The preset dialect already has the spelling: hfd = incoai/Qwen3.8-27B-DFlash2-GGUF:Q4_K_M, canonicalised to spec-draft-hf. outfit remote deploy would read it the way it already reads hf for the model and emit a repo-qualified companion, instead of letting it pass through into serveArgs.

Touches:

  • companionsFrom and DeployConfig.Companions (Go)
  • parseCompanions — relax the / rule to a repo-qualified form
  • SeedSelection.companions and applySelection
  • the seeder — a second listSelectedFiles/resolveRevision, and a manifest recording both revisions

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

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions