cacce61ddc
- NEW musicgen leaf package: blocking Generate over ACE-Step's async job queue (release_task -> poll query_result -> fetch file, all via /upstream); tolerant envelope parsing, double-encoded result handled - NEW embeddings leaf package: EmbedModel + RerankModel as separate mints (two server instances on the host, llama.cpp #20085); InstructedQuery helper for Qwen3-style query/document asymmetry - provider/llamaswap: /v1/embeddings + /v1/rerank clients with strict validation (index-ordered vectors, count mismatch and out-of-range index are hard errors; rerank sorted descending, minimal parser) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1.7 KiB
1.7 KiB
ADR-0021: musicgen interface (blocking Generate over an async job queue)
Status: Accepted (2026-07-12)
Context
The llama-swap host gained ACE-Step 1.5 (full songs with vocals, seconds per
clip warm on the reference GPU). Its API is an async job queue —
POST /release_task → poll POST /query_result → GET the result file —
unlike every other majordomo media backend, which is one blocking call.
Decision
- New
musicgenleaf package, ADR-0016→0020 conventions:Request{Prompt, Lyrics, DurationSeconds, Format, Steps, Seed},Result{Audio{Data, MIME}, Raw}, functional options, zero value = backend default, bytes-only. Model.Generateblocks, polling internally (2s interval, ctx-bounded). The one-call contract is the package's value: callers budget the whole job with a context deadline exactly like imagegen/videogen, and the async mechanics stay a provider detail. An async job surface (mirroring the deliberately-deferred videogen one, ADR-0019) can come later if a caller ever needs progress.- provider/llamaswap reaches ACE-Step through the
/upstream/<model>/passthrough (ADR-0020). Envelope parsing is tolerant (datawrapper or bare array;resultarrives as a double-encoded JSON string) and the result-file URL is routed back through the same upstream.audio_durationis the v1 param name — an unknown field degrades to default clip length upstream, never an error; verify at smoke.
Consequences
- Music jobs occupy the exclusive GPU group like video; callers own the timeout budget (mort keeps the tool timeout under its agent ceiling).
- The double-encoded
resultstring and envelope shapes are pinned by the netherstorm image build; host smoke tests are the drift defence.