{
  "package": "@providerkit/core",
  "docs": "https://providerkit.dev/guides/errors/",
  "note": "A kind names the remedy, not the vendor or the HTTP status. `family` groups kinds that share a remedy.",
  "kinds": [
    {
      "kind": "timeout",
      "family": "retry",
      "fix": "Retry. Our deadline fired, not their answer.",
      "isTransient": true,
      "isBackupEligible": false
    },
    {
      "kind": "network",
      "family": "retry",
      "fix": "Retry. The request never reached them.",
      "isTransient": true,
      "isBackupEligible": false
    },
    {
      "kind": "overload",
      "family": "retry",
      "fix": "Retry, or fall back to another model.",
      "isTransient": true,
      "isBackupEligible": true
    },
    {
      "kind": "rate",
      "family": "retry",
      "fix": "Wait out the window, or rotate the key or model.",
      "isTransient": true,
      "isBackupEligible": true
    },
    {
      "kind": "quota",
      "family": "account",
      "fix": "Top up, or wait for the reset. Retrying will not help.",
      "isTransient": false,
      "isBackupEligible": false
    },
    {
      "kind": "entitlement",
      "family": "account",
      "fix": "Change the plan. A new key and a top-up both fail here.",
      "isTransient": false,
      "isBackupEligible": false
    },
    {
      "kind": "auth",
      "family": "account",
      "fix": "Fix the credential. Every retry lands the same.",
      "isTransient": false,
      "isBackupEligible": false
    },
    {
      "kind": "context",
      "family": "context",
      "fix": "Send less. Compact the conversation. Waiting fixes nothing.",
      "isTransient": false,
      "isBackupEligible": false
    },
    {
      "kind": "model",
      "family": "ours",
      "fix": "Use a model this endpoint actually serves.",
      "isTransient": false,
      "isBackupEligible": false
    },
    {
      "kind": "content",
      "family": "ours",
      "fix": "A safety filter caught the prompt or the answer.",
      "isTransient": false,
      "isBackupEligible": false
    },
    {
      "kind": "invalid",
      "family": "ours",
      "fix": "Fix the request. This one is our bug.",
      "isTransient": false,
      "isBackupEligible": false
    },
    {
      "kind": "aborted",
      "family": "inert",
      "fix": "Nothing. The caller pressed Stop. This is not a failure.",
      "isTransient": false,
      "isBackupEligible": false
    },
    {
      "kind": "unknown",
      "family": "inert",
      "fix": "Unrecognised. Surface the body and look at it.",
      "isTransient": false,
      "isBackupEligible": false
    }
  ]
}
