catalog: status: down for the 6 unreachable services; StatusT extended

Per althing thread 01KRCNSF0V5NDCKB34H663MXHS — the catalog declared
14 services but 6 of them aren't running on irv-ml1 (chatterbox,
index-tts, qwen3-tts, cosyvoice, voxtral, kyutai-tts; missing from
docker ps entirely). Without action, the asset-engine UI would
declare them as available and consumers would hit unreachable
endpoints.

asset-engine consumer chose option (1) of three I sketched: extend
StatusT with `down` and treat it identically to `catalog-deferred`
in the picker (greyed, non-clickable). Lightweight, declarative, no
runtime health-check machinery, easy to revert when services
return.

Changes:

- StatusT enum (in asset_engine/catalog.py — committed there
  separately) extended from
    Literal["ready", "catalog-deferred", "experimental"]
  to
    Literal["ready", "catalog-deferred", "experimental", "down"]
- 6 services flipped to status: down.
- CATALOG-CONTRACT.md: replaced the bare-enum status row with a
  four-row sub-table that names each value's meaning AND its picker
  behavior. `down` and `catalog-deferred` get the same UI treatment
  but the tooltip text differentiates ("Catalog-deferred" vs
  "Service down — temporarily unreachable on irv-ml1") so the
  semantic distinction (design state vs fleet-ops state) is
  preserved.
- CATALOG-CONTRACT.md versioning policy table: new row codifying
  "extending an existing enum (StatusT, FieldTypeT, ResponseTypeT,
  CategoryT) with a non-conflicting value, with the consumer
  updated in the same coordinated change" → no catalog_version
  bump. Explicit rule for future enum extensions.
- JSON Schema regenerated.

catalog_version stays at 1.

Operational note (not catalog-side): the down services likely got
reaped 13+ days ago per the docker timestamps when other unrelated
work was done on irv-ml1. Bringing them back is a deploy task
outside this commit's scope. Flip status: down → ready in this file
once each one's confirmed running.
This commit is contained in:
vh
2026-05-11 16:31:53 -07:00
parent a0d09edc42
commit 95f24573e4
3 changed files with 19 additions and 2 deletions
+11 -1
View File
@@ -37,7 +37,16 @@ reproducibility_audit: [Audit] # one entry per service
| `description` | string | no | one-paragraph summary |
| `category` | enum: tts, asr, sfx, music, image | yes | groups in pickers |
| `version` | int | yes | per-service schema version; bump on field changes |
| `status` | enum: ready, catalog-deferred, experimental | no | default: ready |
| `status` | enum: ready, catalog-deferred, experimental, down | no | default: ready |
**Status semantics:**
| value | meaning | picker behavior |
|---|---|---|
| `ready` | Deployed, exercised, current default | clickable, primary surface |
| `experimental` | Deployed, may break under unusual params or while a custom renderer is being built (e.g. kokoro-captioned pre-renderer) | clickable, surfaced with a "experimental" tag |
| `catalog-deferred` | By-design out of scope this catalog version (e.g. ComfyUI requires per-asset workflow templates the catalog can't express today) | greyed, non-clickable, "deferred" tooltip |
| `down` | *Temporarily* unreachable on the host fleet — deployment gap, scheduled maintenance, container reaped, etc. Distinct from `catalog-deferred` because the intent is to flip back to `ready` once redeployed; the catalog row still describes a real intended service. | greyed, non-clickable, "service down" tooltip |
| `host` | string (host alias) | yes | which fleet host serves this |
| `endpoint` | URL | yes | absolute URL of the inference endpoint |
| `method` | string | yes | HTTP method (POST common) |
@@ -97,6 +106,7 @@ Same change-management as field types.
| Add a non-required field to an existing service | service `version:` |
| Add an optional key to the `response:` schema (e.g. audio_field, timestamps_field) | nothing — additive, backward-compatible |
| Add an optional key to a Field (e.g. section) or to Service (e.g. section_groups) | nothing — additive, backward-compatible |
| Extend an existing enum (StatusT, FieldTypeT, ResponseTypeT, CategoryT) with a non-conflicting new value, with the consumer updated in the same coordinated change | nothing — older consumers don't encounter the new value; updated consumers parse it correctly |
| Change a field's type, range, or default | service `version:` |
| Remove a service | service `version:` (sentinel: removed=true), then drop in next catalog_version bump |
| Add a new entry to the field-type vocabulary | `catalog_version:` |
+2 -1
View File
@@ -513,7 +513,8 @@
"enum": [
"ready",
"catalog-deferred",
"experimental"
"experimental",
"down"
],
"title": "Status",
"type": "string"
+6
View File
@@ -199,6 +199,7 @@ services:
Zero-shot voice cloning from ~5s reference. 9 paralinguistic tags.
category: tts
version: 1
status: down
host: irv-ml1
endpoint: http://10.100.79.3:8196/v1/audio/speech
method: POST
@@ -258,6 +259,7 @@ services:
(timbre from one reference, emotion from another). 22050 Hz fixed output.
category: tts
version: 1
status: down
host: irv-ml1
endpoint: http://10.100.79.3:8192/v1/audio/speech
method: POST
@@ -333,6 +335,7 @@ services:
instruction-driven emotion, voice cloning.
category: tts
version: 1
status: down
host: irv-ml1
endpoint: http://10.100.79.3:8191/v1/audio/speech
method: POST
@@ -389,6 +392,7 @@ services:
English prosody not ElevenLabs-grade — use Qwen3-TTS for English.
category: tts
version: 1
status: down
host: irv-ml1
endpoint: http://10.100.79.3:8190/v1/audio/speech
method: POST
@@ -497,6 +501,7 @@ services:
+ Moshi dialogue framework. OpenAI-compat HTTP wrapper over Rust streaming core.
category: tts
version: 1
status: down
host: irv-ml1
endpoint: http://10.100.79.3:8198/v1/audio/speech
method: POST
@@ -629,6 +634,7 @@ services:
8 languages, 70ms model latency, 9.7× realtime. Served via vLLM-Omni.
category: tts
version: 1
status: down
host: irv-ml1
endpoint: http://10.100.79.3:8197/v1/audio/speech
method: POST