{
  "jsonSchema": {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "title": "NVIDIA SMI collector configuration.",
    "type": "object",
    "properties": {
      "update_every": {
        "title": "Update every",
        "description": "Data collection interval, measured in seconds.",
        "type": "integer",
        "minimum": 1,
        "default": 10
      },
      "binary_path": {
        "title": "Binary path",
        "description": "Path to the `nvidia-smi` binary.",
        "type": "string",
        "default": "nvidia-smi"
      },
      "timeout": {
        "title": "Timeout",
        "description": "The maximum duration, in seconds, to wait for an `nvidia-smi` command to complete.",
        "type": "number",
        "minimum": 0.5,
        "default": 10
      },
      "loop_mode": {
        "title": "Loop Mode",
        "description": "When enabled, `nvidia-smi` is executed continuously in a separate thread using the `-l` option.",
        "type": "boolean",
        "default": true
      }
    },
    "required": [
      "binary_path"
    ],
    "patternProperties": {
      "^name$": {}
    }
  },
  "uiSchema": {
    "uiOptions": {
      "fullPage": true
    },
    "binary_path": {
      "ui:help": "If an absolute path is provided, the collector will use it directly; otherwise, it will search for the binary in directories specified in the PATH environment variable."
    },
    "timeout": {
      "ui:help": "This setting applies differently based on the collector's mode. **Loop Mode:** In loop mode, the timeout primarily determines how long to wait for the initial `nvidia-smi` execution. If the initial query takes longer than the timeout, the collector may report an error. For systems with multiple GPUs, the initial load time can sometimes be significant (e.g., 5-10 seconds). **Regular Mode:** If the collector is in regular mode, the timeout specifies how long to wait for each individual `nvidia-smi` execution."
    },
    "loop_mode": {
      "ui:help": "In loop mode, `nvidia-smi` will repeatedly query GPU data at specified intervals, defined by the `-l SEC` or `--loop=SEC` parameter, rather than just running the query once. This enables ongoing performance tracking by putting the application to sleep between queries."
    }
  }
}
