{
  "$schema": "https://json-schema.org/draft-07/schema#",
  "copyright": [
    "SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.",
    "SPDX-License-Identifier: Apache-2.0",
    "Licensed under the Apache License, Version 2.0 (the \"License\");",
    "you may not use this file except in compliance with the License.",
    "You may obtain a copy of the License at",
    "http://www.apache.org/licenses/LICENSE-2.0",
    "Unless required by applicable law or agreed to in writing, software",
    "distributed under the License is distributed on an \"AS IS\" BASIS,",
    "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.",
    "See the License for the specific language governing permissions and",
    "limitations under the License."
  ],
  "properties": {
    "component": {
      "properties": {
        "name": {
          "pattern": "^[a-z]([a-z0-9_\\-]{0,29}[a-z0-9])?$",
          "type": "string"
        },
        "namespace": {
          "pattern": "^[a-z]([a-z0-9_\\-]{0,29}[a-z0-9])?$",
          "oneOf": [
            { "type": "string" },
            { "type": "null" }
          ]
        }
      },
      "required": [
        "name"
      ]
    },
    "image": {
      "properties": {
        "pullSecrets": {
          "oneOf": [
            {
              "items": [
                {
                  "properties": {
                    "name": {
                      "$ref": "#/$defs/kubernetes_label",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              ],
              "minItems": 0,
              "type": "array"
            },
            { "type": "null" }
          ]
        },
        "name": {
          "type": "string"
        }
      },
      "required": [
        "name"
      ],
      "type": "object"
    },
    "distributed": {
      "properties": {
        "requestPlane": {
          "properties": {
            "etcdUrl": {
              "type": "string"
            },
            "natsUrl": {
              "type": "string"
            },
            "timeout": {
              "oneOf": [
                {
                  "minimum": 1,
                  "type": "integer"
                },
                { "type": "null" }
              ]
            }
          },
          "oneOf": [
            { "type": "object" },
            { "type": "null" }
          ],
          "required": [
            "etcdUrl",
            "natsUrl"
          ]
        },

        "workerCount": {
          "oneOf": [
            {
              "minimum": 1,
              "type": "integer"
            },
            { "type": "null" }
          ]
        }
      },
      "oneOf": [
        { "type": "object" },
        { "type": "null" }
      ]
    },
    "kubernetes": {
      "properties": {
        "checks": {
          "properties": {
            "liveness": {
              "properties": {
                "enabled": {
                  "oneOf": [
                    { "type": "boolean" },
                    { "type": "null" }
                  ]
                },
                "failureThreshold": {
                  "oneOf": [
                    {
                      "minimum": 1,
                      "type": "integer"
                    },
                    { "type": "null" }
                  ]
                },
                "initialDelaySeconds": {
                  "oneOf": [
                    {
                      "minimum": 1,
                      "type": "integer"
                    },
                    { "type": "null" }
                  ]
                },
                "periodSeconds": {
                  "oneOf": [
                    {
                      "minimum": 1,
                      "type": "integer"
                    },
                    { "type": "null" }
                  ]
                },
                "successThreshold": {
                  "oneOf": [
                    {
                      "minimum": 1,
                      "type": "integer"
                    },
                    { "type": "null" }
                  ]
                }
              },
              "oneOf": [
                { "type": "object" },
                { "type": "null" }
              ]
            },
            "readiness": {
              "properties": {
                "enabled": {
                  "oneOf": [
                    { "type": "boolean" },
                    { "type": "null" }
                  ]
                },
                "failureThreshold": {
                  "oneOf": [
                    {
                      "minimum": 1,
                      "type": "integer"
                    },
                    { "type": "null" }
                  ]
                },
                "initialDelaySeconds": {
                  "oneOf": [
                    {
                      "minimum": 1,
                      "type": "integer"
                    },
                    { "type": "null" }
                  ]
                },
                "periodSeconds": {
                  "oneOf": [
                    {
                      "minimum": 1,
                      "type": "integer"
                    },
                    { "type": "null" }
                  ]
                },
                "successThreshold": {
                  "oneOf": [
                    {
                      "minimum": 1,
                      "type": "integer"
                    },
                    { "type": "null" }
                  ]
                }
              },
              "oneOf": [
                { "type": "object" },
                { "type": "null" }
              ]
            }
          },
          "oneOf": [
            { "type": "object" },
            { "type": "null" }
          ]
        },
        "labels": {
          "oneOf": [
            {
              "items": {
                "$ref": "#/$defs/kubernetes_label"
              },
              "minItems": 0,
              "type": "array"
            },
            { "type": "null" }
          ]
        },
        "terminationGracePeriod": {
          "oneOf": [
            {
              "minimum": 1,
              "type": "integer"
            },
            { "type": "null" }
          ]
        },
        "tolerations": {
          "oneOf": [
            {
              "items": { "type": "object" },
              "minItems": 0,
              "type": "array"
            },
            { "type": "null" }
          ]
        }
      },
      "oneOf": [
        { "type": "object" },
        { "type": "null" }
      ]
    },
    "model": {
      "properties": {
        "instance": {
          "properties": {
            "count": {
              "oneOf": [
                {
                  "minimum": 1,
                  "type": "integer"
                },
                { "type": "null" }
              ]
            },
            "parallelism": {
              "properties": {
                "pipeline": {
                  "oneOf": [
                    {
                      "minimum": 1,
                      "type": "integer"
                    },
                    { "type": "null" }
                  ]
                },
                "tensor": {
                  "oneOf": [
                    {
                      "minimum": 1,
                      "type": "integer"
                    },
                    { "type": "null" }
                  ]
                }
              },
              "oneOf": [
                { "type": "object" },
                { "type": "null" }
              ]
            }
          },
          "oneOf": [
            { "type": "object" },
            { "type": "null" }
          ]
        },
        "repository": {
          "properties": {
            "path": {
              "oneOf": [
                { "type": "string" },
                { "type": "null" }
              ]
            },
            "volumeMounts": {
              "oneOf": [
                {
                  "items": {
                    "properties": {
                      "name": {
                        "$ref": "#/$defs/kubernetes_label"
                      },
                      "path": {
                        "oneOf": [
                          { "type": "string" },
                          { "type": "null" }
                        ]
                      },
                      "persistentVolumeClaim": {
                        "$ref": "#/$defs/kubernetes_label"
                      }
                    },
                    "type": "object",
                    "required": [
                      "name",
                      "persistentVolumeClaim"
                    ]
                  },
                  "minItems": 0,
                  "type": "array"
                },
                { "type": "null" }
              ]
            }
          },
          "oneOf": [
            { "type": "object" },
            { "type": "null" }
          ]
        }
      },
      "oneOf": [
        { "type": "object" },
        { "type": "null" }
      ]
    },
    "ports": {
      "properties": {
        "data": {
          "oneOf": [
            { "$ref": "#/$defs/container_port" },
            { "type": "null" }
          ]
        },
        "health": {
          "oneOf": [
            { "$ref": "#/$defs/container_port" },
            { "type": "null" }
          ]
        },
        "metrics": {
          "oneOf": [
            { "$ref": "#/$defs/container_port" },
            { "type": "null" }
          ]
        },
        "request": {
          "oneOf": [
            { "$ref": "#/$defs/container_port" },
            { "type": "null" }
          ]
        }
      },
      "oneOf": [
        { "type": "object" },
        { "type": "null" }
      ]
    },
    "resources": {
      "properties": {
        "cpu": {
          "oneOf": [
            {
              "minimum": 1,
              "type": "integer"
            },
            { "type": "null" }
          ]
        },
        "ephemeral": {
          "oneOf": [
            { "$ref": "#/$defs/kubernetes_units" },
            { "type": "null" }
          ]
        },
        "gpu": {
          "properties": {
            "count": {
              "oneOf": [
                {
                  "minimum": 1,
                  "type": "integer"
                },
                { "type" : "null" }
              ]
            },
            "product": {
              "oneOf": [
                {
                  "items": {
                    "$ref": "#/$defs/kubernetes_label"
                  },
                  "type": "array"
                },
                { "type": "null" }
              ]
            }
          },
          "oneOf": [
            { "type": "object" },
            { "type": "null" }
          ]
        },
        "memory": {
          "oneOf": [
            { "$ref": "#/$defs/kubernetes_units" },
            { "type" : "null" }
          ]
        },
        "sharedMemory": {
          "oneOf": [
            { "$ref": "#/$defs/kubernetes_units" },
            { "type" : "null" }
          ]
        }
      },
      "oneOf": [
        { "type": "object" },
        { "type": "null" }
      ]
    }
  },
  "required": [
    "component",
    "distributed",
    "image"
  ],
  "type": "object",
  "$defs": {
    "container_port": {
      "maximum": 65535,
      "minimum": 1025,
      "type": "integer"
    },
    "kubernetes_label": {
      "pattern": "^[a-z0-9]([a-z0-9_\\-\\/\\.]{0,61}[a-z0-9])?$",
      "type": "string"
    },
    "kubernetes_units": {
      "pattern": "^\\d+[GKMgkm]i$",
      "type": "string"
    },
    "service_port": {
      "maximum": 32767,
      "minimum": 30000,
      "type": "integer"
    }
  }
}
