catalog-contract: section_groups + Field.section for progressive disclosure; ace-step v2
asset_engine consumer (althing thread 01KRCJF7NGMXYE9F62Q1A6KFD4)
needed structure for ace-step's 27-field form. Two additive Pydantic
changes — backward-compatible, no catalog_version bump per the
policy table:
- CatalogField.section: str | None = None
- CatalogService.section_groups: list[CatalogSectionGroup] = []
- new CatalogSectionGroup model: {id, label, hint?}
Validator: every Field.section value must reference a declared
section_groups[].id within the same service; section_groups[].id
values are unique. CATALOG-CONTRACT.md updated with both the new
service-fields row and a versioning-policy row covering
"add optional Field/Service keys -> no bump."
ace-step entry rewritten to use the new schema:
- bumped version 1 -> 2
- declared 6 section groups (basic / generation / conditioning /
a2a / lora / output) with hints
- tagged every field with a section
- added previously-missing checkpoint_path (required: true,
default: "/app/checkpoints" — the container's mount path).
Wrapper-side cleanup (default in infer-api.py) queued as
follow-up.
- changed lyrics from optional: true -> required: true with
default "" to match upstream's `lyrics: str` shape (empty
string satisfies it).
JSON Schema regenerated.
Pydantic-model side of this change lives in asset_engine at
src/asset_engine/catalog.py — committed there separately.
This commit is contained in:
@@ -46,6 +46,7 @@ reproducibility_audit: [Audit] # one entry per service
|
||||
| `model.revision` | string \| null | no | SHA when known |
|
||||
| `model.image` | string | yes | container image ref this is hosted from |
|
||||
| `fields` | list[Field] | no | request parameters; empty for catalog-deferred |
|
||||
| `section_groups` | list[SectionGroup] | no | named groups for progressive disclosure; consumers render fields under tabs/accordions per group. SectionGroup = `{id, label, hint?}`. Field.section refs must resolve here. |
|
||||
| `response.type` | enum: audio, image, video, text, json, file | yes | renderer dispatch (closed vocabulary) |
|
||||
| `response.mime` | string | no | static response MIME (raw-bytes wire) |
|
||||
| `response.mime_from_field` | string | no | name of a field whose value determines the MIME (raw-bytes wire) |
|
||||
@@ -95,6 +96,7 @@ Same change-management as field types.
|
||||
| Add a new service | nothing |
|
||||
| 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 |
|
||||
| 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:` |
|
||||
|
||||
Reference in New Issue
Block a user