From 95f24573e4f55db51a69cfc641555ae57bc87c24 Mon Sep 17 00:00:00 2001 From: Vuong Hoang Date: Mon, 11 May 2026 16:31:53 -0700 Subject: [PATCH] catalog: status: down for the 6 unreachable services; StatusT extended MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- docs/asset-engine/CATALOG-CONTRACT.md | 12 +++++++++++- docs/asset-engine/services.schema.json | 3 ++- docs/asset-engine/services.yaml | 6 ++++++ 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/docs/asset-engine/CATALOG-CONTRACT.md b/docs/asset-engine/CATALOG-CONTRACT.md index 2e35f69..ca31fb5 100644 --- a/docs/asset-engine/CATALOG-CONTRACT.md +++ b/docs/asset-engine/CATALOG-CONTRACT.md @@ -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:` | diff --git a/docs/asset-engine/services.schema.json b/docs/asset-engine/services.schema.json index 3feb093..4570cb9 100644 --- a/docs/asset-engine/services.schema.json +++ b/docs/asset-engine/services.schema.json @@ -513,7 +513,8 @@ "enum": [ "ready", "catalog-deferred", - "experimental" + "experimental", + "down" ], "title": "Status", "type": "string" diff --git a/docs/asset-engine/services.yaml b/docs/asset-engine/services.yaml index 906cf6a..9fee5bd 100644 --- a/docs/asset-engine/services.yaml +++ b/docs/asset-engine/services.yaml @@ -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