{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "$id": "https://modelparams.dev/api/v1/schema.json",
  "title": "modelparams.dev Model",
  "description": "Schema for a single AI model variant entry in the modelparams.dev catalog.",
  "$ref": "#/definitions/Model",
  "definitions": {
    "Model": {
      "type": "object",
      "properties": {
        "provider": {
          "type": "string",
          "minLength": 1,
          "pattern": "^[a-z0-9][a-z0-9-]*$"
        },
        "authType": {
          "type": "string",
          "enum": [
            "api_key",
            "subscription"
          ]
        },
        "model": {
          "type": "string",
          "minLength": 1,
          "pattern": "^[a-z0-9][a-z0-9._:-]*$"
        },
        "params": {
          "type": "array",
          "items": {
            "anyOf": [
              {
                "type": "object",
                "properties": {
                  "path": {
                    "type": "string",
                    "minLength": 1,
                    "pattern": "^[a-z][a-z0-9_]*(\\.[a-z][a-z0-9_]*)*$"
                  },
                  "label": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 80
                  },
                  "description": {
                    "type": "string",
                    "minLength": 1,
                    "maxLength": 500
                  },
                  "group": {
                    "type": "string",
                    "enum": [
                      "generation_length",
                      "sampling",
                      "reasoning",
                      "tooling",
                      "output_format",
                      "observability",
                      "provider_metadata"
                    ]
                  },
                  "applicability": {
                    "type": "object",
                    "properties": {
                      "only": {
                        "anyOf": [
                          {
                            "type": "object",
                            "additionalProperties": {
                              "anyOf": [
                                {
                                  "type": [
                                    "string",
                                    "number",
                                    "boolean",
                                    "null"
                                  ]
                                },
                                {
                                  "type": "array",
                                  "items": {
                                    "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/applicability/properties/only/anyOf/0/additionalProperties/anyOf/0"
                                  },
                                  "minItems": 1
                                },
                                {
                                  "type": "object",
                                  "properties": {
                                    "not": {
                                      "anyOf": [
                                        {
                                          "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/applicability/properties/only/anyOf/0/additionalProperties/anyOf/0"
                                        },
                                        {
                                          "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/applicability/properties/only/anyOf/0/additionalProperties/anyOf/1"
                                        }
                                      ]
                                    }
                                  },
                                  "required": [
                                    "not"
                                  ],
                                  "additionalProperties": false
                                }
                              ]
                            },
                            "propertyNames": {
                              "pattern": "^[a-z][a-z0-9_]*(\\.[a-z][a-z0-9_]*)*$"
                            }
                          },
                          {
                            "type": "array",
                            "items": {
                              "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/applicability/properties/only/anyOf/0"
                            },
                            "minItems": 1
                          }
                        ]
                      },
                      "except": {
                        "anyOf": [
                          {
                            "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/applicability/properties/only/anyOf/0"
                          },
                          {
                            "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/applicability/properties/only/anyOf/1"
                          }
                        ]
                      }
                    },
                    "additionalProperties": false
                  },
                  "type": {
                    "type": "string",
                    "const": "boolean"
                  },
                  "default": {
                    "type": "boolean"
                  }
                },
                "required": [
                  "path",
                  "label",
                  "description",
                  "group",
                  "type"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "path": {
                    "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/path"
                  },
                  "label": {
                    "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/label"
                  },
                  "description": {
                    "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/description"
                  },
                  "group": {
                    "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/group"
                  },
                  "applicability": {
                    "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/applicability"
                  },
                  "type": {
                    "type": "string",
                    "const": "enum"
                  },
                  "default": {
                    "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/applicability/properties/only/anyOf/0/additionalProperties/anyOf/0"
                  },
                  "values": {
                    "type": "array",
                    "items": {
                      "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/applicability/properties/only/anyOf/0/additionalProperties/anyOf/0"
                    },
                    "minItems": 1
                  }
                },
                "required": [
                  "path",
                  "label",
                  "description",
                  "group",
                  "type",
                  "values"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "path": {
                    "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/path"
                  },
                  "label": {
                    "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/label"
                  },
                  "description": {
                    "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/description"
                  },
                  "group": {
                    "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/group"
                  },
                  "applicability": {
                    "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/applicability"
                  },
                  "type": {
                    "type": "string",
                    "const": "integer"
                  },
                  "default": {
                    "type": "integer"
                  },
                  "range": {
                    "type": "object",
                    "properties": {
                      "min": {
                        "type": "number"
                      },
                      "max": {
                        "type": "number"
                      },
                      "step": {
                        "type": "number",
                        "exclusiveMinimum": 0
                      }
                    },
                    "additionalProperties": false
                  }
                },
                "required": [
                  "path",
                  "label",
                  "description",
                  "group",
                  "type"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "path": {
                    "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/path"
                  },
                  "label": {
                    "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/label"
                  },
                  "description": {
                    "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/description"
                  },
                  "group": {
                    "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/group"
                  },
                  "applicability": {
                    "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/applicability"
                  },
                  "type": {
                    "type": "string",
                    "const": "number"
                  },
                  "default": {
                    "type": "number"
                  },
                  "range": {
                    "$ref": "#/definitions/Model/properties/params/items/anyOf/2/properties/range"
                  }
                },
                "required": [
                  "path",
                  "label",
                  "description",
                  "group",
                  "type"
                ],
                "additionalProperties": false
              },
              {
                "type": "object",
                "properties": {
                  "path": {
                    "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/path"
                  },
                  "label": {
                    "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/label"
                  },
                  "description": {
                    "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/description"
                  },
                  "group": {
                    "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/group"
                  },
                  "applicability": {
                    "$ref": "#/definitions/Model/properties/params/items/anyOf/0/properties/applicability"
                  },
                  "type": {
                    "type": "string",
                    "const": "string"
                  },
                  "default": {
                    "type": "string"
                  }
                },
                "required": [
                  "path",
                  "label",
                  "description",
                  "group",
                  "type"
                ],
                "additionalProperties": false
              }
            ]
          }
        }
      },
      "required": [
        "provider",
        "authType",
        "model",
        "params"
      ],
      "additionalProperties": false
    }
  }
}
