173 lines
5.1 KiB
JSON
173 lines
5.1 KiB
JSON
{
|
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
"$id": "https://yovision.local/contracts/runtime-status/v1/runtime-status.schema.json",
|
|
"title": "YoVision Brain runtime status v1",
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": [
|
|
"schema_version",
|
|
"status_id",
|
|
"brain_instance_ref",
|
|
"sequence",
|
|
"observed_at",
|
|
"runtime",
|
|
"model",
|
|
"configurations",
|
|
"health",
|
|
"inputs"
|
|
],
|
|
"properties": {
|
|
"schema_version": { "const": "yovision.runtime-status/v1" },
|
|
"status_id": {
|
|
"type": "string",
|
|
"pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
|
|
},
|
|
"brain_instance_ref": { "$ref": "#/$defs/logicalRef" },
|
|
"sequence": { "type": "integer", "minimum": 0 },
|
|
"observed_at": { "type": "string", "format": "date-time" },
|
|
"runtime": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["state", "version"],
|
|
"properties": {
|
|
"state": { "$ref": "#/$defs/runtimeState" },
|
|
"version": { "$ref": "#/$defs/version" },
|
|
"started_at": { "type": ["string", "null"], "format": "date-time" }
|
|
}
|
|
},
|
|
"model": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["model_ref", "version"],
|
|
"properties": {
|
|
"model_ref": { "$ref": "#/$defs/logicalRef" },
|
|
"version": { "$ref": "#/$defs/version" }
|
|
}
|
|
},
|
|
"configurations": {
|
|
"type": "array",
|
|
"maxItems": 4096,
|
|
"items": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["config_id", "apply_state", "applied_revision", "error_code"],
|
|
"properties": {
|
|
"config_id": { "$ref": "#/$defs/configId" },
|
|
"apply_state": {
|
|
"type": "string",
|
|
"enum": ["not_configured", "applying", "applied", "rejected"]
|
|
},
|
|
"applied_revision": {
|
|
"type": ["integer", "null"],
|
|
"minimum": 1
|
|
},
|
|
"error_code": { "$ref": "#/$defs/nullableErrorCode" }
|
|
},
|
|
"allOf": [
|
|
{
|
|
"if": {
|
|
"required": ["apply_state"],
|
|
"properties": { "apply_state": { "const": "not_configured" } }
|
|
},
|
|
"then": { "properties": { "applied_revision": { "type": "null" } } }
|
|
},
|
|
{
|
|
"if": {
|
|
"required": ["apply_state"],
|
|
"properties": { "apply_state": { "const": "applied" } }
|
|
},
|
|
"then": { "properties": { "applied_revision": { "type": "integer", "minimum": 1 } } }
|
|
},
|
|
{
|
|
"if": {
|
|
"required": ["apply_state"],
|
|
"properties": { "apply_state": { "const": "rejected" } }
|
|
},
|
|
"then": { "properties": { "error_code": { "$ref": "#/$defs/errorCode" } } }
|
|
}
|
|
]
|
|
}
|
|
},
|
|
"health": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["overall", "error_codes", "metrics"],
|
|
"properties": {
|
|
"overall": {
|
|
"type": "string",
|
|
"enum": ["healthy", "degraded", "unhealthy"]
|
|
},
|
|
"error_codes": {
|
|
"type": "array",
|
|
"uniqueItems": true,
|
|
"maxItems": 32,
|
|
"items": { "$ref": "#/$defs/errorCode" }
|
|
},
|
|
"metrics": { "$ref": "#/$defs/metrics" }
|
|
}
|
|
},
|
|
"inputs": {
|
|
"type": "array",
|
|
"maxItems": 4096,
|
|
"items": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["input_ref", "state", "error_codes", "metrics"],
|
|
"properties": {
|
|
"input_ref": { "$ref": "#/$defs/logicalRef" },
|
|
"state": { "$ref": "#/$defs/runtimeState" },
|
|
"error_codes": {
|
|
"type": "array",
|
|
"uniqueItems": true,
|
|
"maxItems": 16,
|
|
"items": { "$ref": "#/$defs/errorCode" }
|
|
},
|
|
"metrics": { "$ref": "#/$defs/metrics" }
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"$defs": {
|
|
"configId": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 128,
|
|
"pattern": "^[A-Za-z0-9][A-Za-z0-9._~-]*$"
|
|
},
|
|
"logicalRef": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 128,
|
|
"pattern": "^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
|
|
},
|
|
"version": {
|
|
"type": "string",
|
|
"minLength": 1,
|
|
"maxLength": 64,
|
|
"pattern": "^[A-Za-z0-9][A-Za-z0-9._+-]{0,63}$"
|
|
},
|
|
"runtimeState": {
|
|
"type": "string",
|
|
"enum": ["unconfigured", "starting", "running", "degraded", "failed", "stopped"]
|
|
},
|
|
"errorCode": {
|
|
"type": "string",
|
|
"pattern": "^[A-Z][A-Z0-9_]{2,63}$"
|
|
},
|
|
"nullableErrorCode": {
|
|
"type": ["string", "null"],
|
|
"pattern": "^[A-Z][A-Z0-9_]{2,63}$"
|
|
},
|
|
"metrics": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"required": ["load_percent", "queue_depth", "latency_ms"],
|
|
"properties": {
|
|
"load_percent": { "type": "number", "minimum": 0, "maximum": 100 },
|
|
"queue_depth": { "type": "integer", "minimum": 0 },
|
|
"latency_ms": { "type": "number", "minimum": 0 }
|
|
}
|
|
}
|
|
}
|
|
}
|