{
  "title": "GPU Cloud Rate Monitor – Runpod & Lambda Price Changes",
  "type": "object",
  "schemaVersion": 1,
  "properties": {
    "providers": {
      "title": "GPU cloud providers",
      "type": "array",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "default": [
        "runpod"
      ],
      "prefill": [
        "runpod"
      ],
      "description": "runpod and/or lambda. Reads only their official public pricing pages."
    },
    "gpuModels": {
      "title": "GPU name phrases",
      "type": "array",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "default": [
        "H100 PCIe"
      ],
      "prefill": [
        "H100 PCIe"
      ],
      "description": "Up to 10 case-insensitive literal phrases. A GPU name may contain any phrase. Empty selects every published model within the other filters; increase maxResults for complete comparison history."
    },
    "runpodTiers": {
      "title": "Runpod tiers",
      "type": "array",
      "editor": "stringList",
      "items": {
        "type": "string"
      },
      "default": [
        "community",
        "secure"
      ],
      "description": "Applies only to Runpod on-demand Pods. Serverless, clusters and spot are excluded."
    },
    "lambdaGpuCounts": {
      "title": "Lambda GPUs per instance",
      "type": "array",
      "editor": "json",
      "items": {
        "type": "integer"
      },
      "default": [
        1
      ],
      "description": "Choose explicit instance GPU counts from [1, 2, 4, 8]. Prices remain per GPU-hour and are multiplied by this count for instance totals. Reserved clusters are excluded."
    },
    "maxUsdPerGpuHour": {
      "title": "Maximum USD per GPU-hour",
      "type": "number",
      "editor": "number",
      "minimum": 1e-7,
      "maximum": 10000,
      "description": "Optional advertised per-GPU price ceiling. Future announced rates can match; inspect rateTiming."
    },
    "computeHours": {
      "title": "Optional compute hours",
      "type": "number",
      "editor": "number",
      "minimum": 1e-7,
      "maximum": 87600,
      "description": "Estimate hours × published per-instance rate. Excludes taxes, storage, egress and performance/capacity guarantees; respects the source effective-date label."
    },
    "maxResults": {
      "title": "Maximum saved rates",
      "type": "integer",
      "default": 5,
      "minimum": 1,
      "maximum": 150,
      "description": "One billed result per provider/model/VRAM/tier/GPU-count rate. A truncated selection never advances history."
    },
    "comparePrevious": {
      "title": "Compare with previous complete run",
      "type": "boolean",
      "default": false,
      "description": "New, changed and unchanged observations plus prior prices. No removal or capacity inference."
    },
    "onlyChanges": {
      "title": "Save only new or changed rates",
      "type": "boolean",
      "default": false,
      "description": "Enables comparison. Unchanged repeats may correctly save zero rows and incur no result charges."
    },
    "snapshotName": {
      "title": "Comparison snapshot",
      "type": "string",
      "editor": "textfield",
      "default": "default",
      "description": "1–80 letters, numbers, underscores or hyphens. History is also separated by providers, filters, GPU counts and output cap."
    },
    "maxRunSeconds": {
      "title": "Run budget in seconds",
      "type": "integer",
      "default": 90,
      "minimum": 30,
      "maximum": 120,
      "description": "Shared deadline. Bounded public requests honor robots.txt and stop on 401/403/429 without a bypass."
    }
  }
}
