catalog: add dia + csm service entries (status: down) + repro audits

dia (:8200) — OpenAI-compat /v1/audio/speech, seedable (not byte-exact),
Apache-2.0 weights. Clean catalog fit; flip to ready after first exercise.

csm (:8201) — OpenAI-compat, but NO seed + temperature-sampled =
non-reproducible (contract's fix-before-adding case), catalogued by
operator direction with a reproducibility caveat + gated-license warning;
belongs at experimental once running.

Fields read from each wrapper's API docs (2026-05-31), to confirm against
live OpenAPI/Pydantic at deploy. No catalog_version bump (add-service =
no bump). NOTE: services.schema.json is stale (pre-existing — 13 errors;
live catalog uses lifecycle, schema predates it); regen via dump_schema.py.
This commit is contained in:
2026-05-31 11:18:46 -07:00
parent a4b8c2a9f4
commit 8eac39b6ce
+184
View File
@@ -1234,6 +1234,180 @@ services:
/history. Until then, expose ComfyUI as an external link in the UI.
User state at /worktank/comfyui/basedir/.
- id: dia
name: Dia / Dia2 TTS
description: >
Nari Labs' dialogue TTS — multi-speaker turn-taking in one pass with
[S1]/[S2] speaker tags and nonverbals (laughs)/(coughs)/(sighs).
Dia2 family (1B streaming, 2B high-quality) selectable on the host.
category: tts
version: 1
status: down
host: irv-ml1
lifecycle:
stack: dia
vram_gb: 7
gpu_device_id: 0
endpoint: http://10.100.79.3:8200/v1/audio/speech
method: POST
content_type: application/json
model:
id: nari-labs/Dia-1.6B
revision: null
image: local/dia:v1
fields:
- name: input
type: textarea
label: Text ([S1]/[S2] dialogue + nonverbals)
required: true
max_length: 5000
description: >
[S1]/[S2] tags mark speaker turns; nonverbals like (laughs),
(coughs), (sighs), (clears throat) go inline. For a clone voice,
prepend the reference transcript manually.
- name: model
type: select
options: [dia-1.6b]
default: dia-1.6b
description: >
Ignored by /v1/audio/speech (serves whatever checkpoint is loaded).
Switch Dia 1.6B / Dia2-1B / Dia2-2B via the wrapper config or Web UI.
- name: voice
type: select
label: Voice / mode
default: S1
description: >
S1 | S2 | dialogue, or a predefined/clone reference filename under
/worktank/dia/reference_audio (e.g. "my_ref.wav").
- name: response_format
type: select
options: [opus, wav]
default: opus
- name: speed
type: slider
min: 0.5
max: 2.0
step: 0.05
default: 1.0
description: Post-generation playback speed multiplier.
- name: seed
type: number
required: false
default: -1
description: -1 = random; any integer for repeatable (not byte-exact) output.
response:
type: audio
mime_from_field: response_format
reproducibility:
seedable: true
deterministic: false
notes: >
Seed gives consistent voice/prosody but NOT byte-exact output —
upstream notes float-arithmetic variance across hardware/versions.
A richer custom /tts endpoint exposes cfg_scale/temperature/top_p/
cfg_filter_top_k for finer control.
estimated_latency:
cold_start_s: 10
warm_per_unit: "dialogue one-pass; ~realtime on the 3090"
license: "Apache-2.0 (Dia weights); MIT (devnen wrapper)"
notes: |
OpenAI-compat /v1/audio/speech plus a richer custom /tts (cfg_scale 3.0,
temperature 1.3, top_p 0.95, cfg_filter_top_k 35, max_tokens,
split_text/chunk_size). Fields read from devnen documentation.md
(2026-05-31); confirm against live OpenAPI/Pydantic at deploy. Deployed
to irv-ml1 but PARKED (asset-engine orchestrates start) — flip to ready
after the first successful generation. Pin DIA_SHA before build.
- id: csm
name: Sesame CSM (conversational)
description: >
Sesame's Conversational Speech Model (CSM-1B) — context-aware speech
(Llama backbone + Mimi codec). Usable as plain TTS, but its edge is
cross-turn prosody for voice agents, not narration.
category: tts
version: 1
status: down
host: irv-ml1
lifecycle:
stack: csm
vram_gb: 8
gpu_device_id: 0
endpoint: http://10.100.79.3:8201/v1/audio/speech
method: POST
content_type: application/json
model:
id: sesame/csm-1b
revision: null
image: local/csm:v1
fields:
- name: model
type: select
options: [csm-1b]
default: csm-1b
- name: input
type: textarea
label: Text
required: true
max_length: 5000
- name: voice
type: select
label: Voice
default: alloy
description: >
alloy | echo | fable | onyx | nova | shimmer, or a cloned voice ID.
- name: response_format
type: select
options: [mp3, opus, aac, flac, wav]
default: mp3
- name: speed
type: slider
min: 0.5
max: 2.0
step: 0.05
default: 1.0
- name: temperature
type: slider
min: 0.0
max: 1.0
step: 0.05
default: 0.8
description: Sampling temperature — higher = more variation.
- name: topk
type: number
required: false
description: Top-k sampling cutoff (1100).
- name: max_audio_length_ms
type: number
required: false
default: 90000
description: Max generated audio length in milliseconds.
response:
type: audio
mime_from_field: response_format
reproducibility:
seedable: false
deterministic: false
notes: >
⚠️ No seed param and temperature-sampled → output varies run-to-run.
Per this contract that is normally a fix-before-adding bug; catalogued
by operator direction. asset-engine "regenerate/fork" will NOT
reproduce a prior CSM take. Clean fix = upstream seed support.
estimated_latency:
cold_start_s: 12
warm_per_unit: "~realtime on the 3090"
license: "Sesame CSM license (gated, non-OSI); MIT (wrapper)"
license_warning: |
sesame/csm-1b is GATED under Sesame's own (non-OSI) license — accept
terms on HF and review before any commercial/redistribution use. Host
needs CSM_HF_TOKEN set before first start.
notes: |
Conversational speech model — context-aware prosody for voice agents,
not a narration reader. Fields read from the phildougherty wrapper
README/API (2026-05-31); confirm against live OpenAPI at deploy.
Deployed to irv-ml1 but PARKED; gated-model token required before
first start. Because it is non-deterministic, when started it belongs
at status: experimental (not ready). Pin CSM_SHA before build.
# Reproducibility audit — answers per service: (a) seedable, (b) model
# deterministic without seed, (c) image tag mutable (security/reproducibility risk).
reproducibility_audit:
@@ -1304,3 +1478,13 @@ reproducibility_audit:
model_deterministic: true
image_tag_mutable: false
notes: "Reproducibility requires persisting full workflow JSON + seed."
- service: dia
seedable: true
model_deterministic: false
image_tag_mutable: false
notes: "Seed gives consistent voice, not byte-exact (float variance). Build pin via DIA_SHA."
- service: csm
seedable: false
model_deterministic: false
image_tag_mutable: false
notes: "⚠️ No seed + temperature-sampled → non-reproducible. Catalogued experimental by operator direction; upstream seed support is the fix. Gated Sesame license."