{
 "openapi": "3.1.0",
 "info": {
  "title": "Wallras",
  "version": "0.19.0",
  "description": "Wallras runs on your own server; these are its endpoints. Model traffic goes through /v1 (OpenAI-compatible), /anthropic and /gemini unchanged. Everything under /wallras needs the X-Wallras-Token header (admin, viewer or app token, or a single sign-on token), except /wallras/health and /wallras/ready. See https://wallras.com/docs.md."
 },
 "paths": {
  "/wallras/datasets": {
   "get": {
    "summary": "Dataset List",
    "operationId": "wallras_datasets_get",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   },
   "post": {
    "summary": "Dataset Create",
    "operationId": "wallras_datasets_post",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/DatasetIn"
       }
      }
     },
     "required": true
    },
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/datasets/{name}": {
   "get": {
    "summary": "Dataset Get",
    "operationId": "wallras_datasets_name_get",
    "parameters": [
     {
      "name": "name",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Name"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   },
   "delete": {
    "summary": "Dataset Archive",
    "operationId": "wallras_datasets_name_delete",
    "parameters": [
     {
      "name": "name",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Name"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/datasets/{name}/items": {
   "post": {
    "summary": "Dataset Add",
    "operationId": "dataset_add_wallras_datasets__name__items_post",
    "parameters": [
     {
      "name": "name",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Name"
      }
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/DatasetItemsIn"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/datasets/{name}/run": {
   "post": {
    "summary": "Dataset Run",
    "description": "Replay the set on a model (one provider call per item, on your key) and report what\npassed, what newly broke and what got fixed. With fail_below, verdict is pass or fail.",
    "operationId": "dataset_run_wallras_datasets__name__run_post",
    "parameters": [
     {
      "name": "name",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Name"
      }
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/DatasetRunIn"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/datasets/{name}/compare": {
   "post": {
    "summary": "Dataset Compare",
    "description": "Run the set on several models or system prompts side by side (one call per item each).",
    "operationId": "dataset_compare_wallras_datasets__name__compare_post",
    "parameters": [
     {
      "name": "name",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Name"
      }
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/CompareIn"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/datasets/{name}/import": {
   "post": {
    "summary": "Dataset Import",
    "description": "Add your own examples: JSON {\"items\": [...]} or JSON Lines, one item per line.",
    "operationId": "dataset_import_wallras_datasets__name__import_post",
    "parameters": [
     {
      "name": "name",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Name"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/datasets/{name}/export": {
   "get": {
    "summary": "Dataset Export",
    "description": "The set as JSON Lines, ready to version in git or import elsewhere.",
    "operationId": "dataset_export_wallras_datasets__name__export_get",
    "parameters": [
     {
      "name": "name",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Name"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/datasets/{name}/watch": {
   "post": {
    "summary": "Dataset Watch",
    "description": "Re-run this set automatically: on a schedule, when the provider silently swaps the model,\nand when drift starts. Runs use the provider key Wallras last saw (or WALLRAS_UPSTREAM_KEY).",
    "operationId": "wallras_datasets_name_watch_post",
    "parameters": [
     {
      "name": "name",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Name"
      }
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/WatchIn"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   },
   "delete": {
    "summary": "Dataset Unwatch",
    "operationId": "wallras_datasets_name_watch_delete",
    "parameters": [
     {
      "name": "name",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Name"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/watch/check": {
   "post": {
    "summary": "Watch Check Now",
    "description": "Check every watched set now instead of waiting for the next tick.",
    "operationId": "watch_check_now_wallras_watch_check_post",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/alerts/test": {
   "post": {
    "summary": "Alert Test",
    "description": "Send a test alert to every configured destination, to check the wiring.",
    "operationId": "alert_test_wallras_alerts_test_post",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/alerts/check": {
   "post": {
    "summary": "Alert Check",
    "description": "Run the alert check now instead of waiting for the next interval.",
    "operationId": "alert_check_wallras_alerts_check_post",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/overview": {
   "get": {
    "summary": "Overview",
    "description": "Everything on one page, with next actions: what to do, and the exact call to do it.",
    "operationId": "overview_wallras_overview_get",
    "parameters": [
     {
      "name": "days",
      "in": "query",
      "required": false,
      "schema": {
       "type": "number",
       "default": 7,
       "title": "Days"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/consistency": {
   "get": {
    "summary": "Consistency",
    "operationId": "consistency_wallras_consistency_get",
    "parameters": [
     {
      "name": "days",
      "in": "query",
      "required": false,
      "schema": {
       "type": "number",
       "default": 30,
       "title": "Days"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/prompts": {
   "get": {
    "summary": "Prompt List",
    "operationId": "wallras_prompts_get",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   },
   "post": {
    "summary": "Prompt Save",
    "operationId": "wallras_prompts_post",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/PromptIn"
       }
      }
     },
     "required": true
    },
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/me": {
   "get": {
    "summary": "Whoami",
    "description": "Which token or signed-in user this is, and its role: what the workspace shows you.",
    "operationId": "whoami_wallras_me_get",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/prompts/{name}": {
   "get": {
    "summary": "Prompt Get",
    "operationId": "prompt_get_wallras_prompts__name__get",
    "parameters": [
     {
      "name": "name",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Name"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/prompts/{name}/resolve": {
   "get": {
    "summary": "Prompt Resolve",
    "description": "The messages to send. Variables come as query parameters: ?label=production&var.customer=Asha",
    "operationId": "prompt_resolve_wallras_prompts__name__resolve_get",
    "parameters": [
     {
      "name": "name",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Name"
      }
     },
     {
      "name": "label",
      "in": "query",
      "required": false,
      "schema": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "null"
        }
       ],
       "title": "Label"
      }
     },
     {
      "name": "version",
      "in": "query",
      "required": false,
      "schema": {
       "anyOf": [
        {
         "type": "integer"
        },
        {
         "type": "null"
        }
       ],
       "title": "Version"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/prompts/{name}/diff": {
   "get": {
    "summary": "Prompt Diff",
    "operationId": "prompt_diff_wallras_prompts__name__diff_get",
    "parameters": [
     {
      "name": "name",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Name"
      }
     },
     {
      "name": "a",
      "in": "query",
      "required": true,
      "schema": {
       "type": "integer",
       "title": "A"
      }
     },
     {
      "name": "b",
      "in": "query",
      "required": true,
      "schema": {
       "type": "integer",
       "title": "B"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/prompts/{name}/usage": {
   "get": {
    "summary": "Prompt Usage",
    "operationId": "prompt_usage_wallras_prompts__name__usage_get",
    "parameters": [
     {
      "name": "name",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Name"
      }
     },
     {
      "name": "days",
      "in": "query",
      "required": false,
      "schema": {
       "type": "number",
       "default": 30,
       "title": "Days"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/prompts/{name}/promote": {
   "post": {
    "summary": "Prompt Promote",
    "description": "Point a label (production, staging...) at a version. With a gate, the version is first run against\na regression set and the label moves only if it passes; the result is kept with the move. With\n\"wait\": false the gate runs in the background (a large set can take minutes): the answer is 202 with\na job to check at GET /wallras/jobs/{id}.",
    "operationId": "prompt_promote_wallras_prompts__name__promote_post",
    "parameters": [
     {
      "name": "name",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Name"
      }
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/PromoteIn"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/jobs/{job}": {
   "get": {
    "summary": "Job Status",
    "description": "A background job (a promotion with \"wait\": false): running, done or failed, with its result.\nKept for a week, in the database. A job still running when the engine stopped stays \"running\"; the\npromotion itself, if it finished, is in the ledger.",
    "operationId": "job_status_wallras_jobs__job__get",
    "parameters": [
     {
      "name": "job",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Job"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/prompts/{name}/rollback": {
   "post": {
    "summary": "Prompt Rollback",
    "operationId": "prompt_rollback_wallras_prompts__name__rollback_post",
    "parameters": [
     {
      "name": "name",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Name"
      }
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/LabelIn"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/judge": {
   "get": {
    "summary": "Judge Scores",
    "description": "Pass rate of live answers a judge model scored, per model and per prompt version.",
    "operationId": "judge_scores_wallras_judge_get",
    "parameters": [
     {
      "name": "days",
      "in": "query",
      "required": false,
      "schema": {
       "type": "number",
       "default": 7,
       "title": "Days"
      }
     },
     {
      "name": "model",
      "in": "query",
      "required": false,
      "schema": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "null"
        }
       ],
       "title": "Model"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/review": {
   "get": {
    "summary": "Review List",
    "operationId": "wallras_review_get",
    "parameters": [
     {
      "name": "status",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "default": "open",
       "title": "Status"
      }
     },
     {
      "name": "kind",
      "in": "query",
      "required": false,
      "schema": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "null"
        }
       ],
       "title": "Kind"
      }
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "default": 100,
       "title": "Limit"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   },
   "post": {
    "summary": "Review Add",
    "operationId": "wallras_review_post",
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/ReviewAddIn"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/review/{rid}": {
   "post": {
    "summary": "Review Decide",
    "operationId": "review_decide_wallras_review__rid__post",
    "parameters": [
     {
      "name": "rid",
      "in": "path",
      "required": true,
      "schema": {
       "type": "integer",
       "title": "Rid"
      }
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/ReviewDecisionIn"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/experiments": {
   "get": {
    "summary": "Experiment List",
    "operationId": "experiment_list_wallras_experiments_get",
    "parameters": [
     {
      "name": "dataset",
      "in": "query",
      "required": false,
      "schema": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "null"
        }
       ],
       "title": "Dataset"
      }
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "default": 50,
       "title": "Limit"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/experiments/{eid}": {
   "get": {
    "summary": "Experiment Get",
    "operationId": "experiment_get_wallras_experiments__eid__get",
    "parameters": [
     {
      "name": "eid",
      "in": "path",
      "required": true,
      "schema": {
       "type": "integer",
       "title": "Eid"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/hub/ingest": {
   "post": {
    "summary": "Hub Ingest",
    "description": "A node's summary (node tokens only). The node is named by its token.",
    "operationId": "hub_ingest_wallras_hub_ingest_post",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/hub/nodes": {
   "get": {
    "summary": "Hub Nodes",
    "description": "Every node, its status, versions, usage and what it says needs attention.",
    "operationId": "hub_nodes_wallras_hub_nodes_get",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/hub/overview": {
   "get": {
    "summary": "Hub Overview",
    "description": "One view across every node: models drifting on several nodes at once, silent nodes, every node's\nnext actions.",
    "operationId": "hub_overview_wallras_hub_overview_get",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/hub/receipts": {
   "get": {
    "summary": "Hub Receipts",
    "description": "The ledger receipts a node has sent, newest first: verify the node's history against them with\nPOST /wallras/integrity/verify on that node.",
    "operationId": "hub_receipts_wallras_hub_receipts_get",
    "parameters": [
     {
      "name": "node",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Node"
      }
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "default": 200,
       "title": "Limit"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/hub/report": {
   "get": {
    "summary": "Hub Report",
    "description": "A combined report across every node (HTML).",
    "operationId": "hub_report_wallras_hub_report_get",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/hub/preview": {
   "get": {
    "summary": "Hub Preview",
    "description": "Exactly what this node sends to its hub, so you can check nothing private leaves.",
    "operationId": "hub_preview_wallras_hub_preview_get",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/hub/ship": {
   "post": {
    "summary": "Hub Ship Now",
    "description": "Send this node's summary to its hub now.",
    "operationId": "hub_ship_now_wallras_hub_ship_post",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/v1/chat/completions": {
   "post": {
    "summary": "Chat Completions",
    "operationId": "chat_completions_v1_chat_completions_post",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    }
   }
  },
  "/v1/{path}": {
   "get": {
    "summary": "Passthrough",
    "description": "Everything else (Responses API, embeddings, model list...) passes through untouched,\nstreamed byte for byte so streaming keeps working on every endpoint.",
    "operationId": "v1_path_get",
    "parameters": [
     {
      "name": "path",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Path"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    }
   },
   "post": {
    "summary": "Passthrough",
    "description": "Everything else (Responses API, embeddings, model list...) passes through untouched,\nstreamed byte for byte so streaming keeps working on every endpoint.",
    "operationId": "v1_path_post",
    "parameters": [
     {
      "name": "path",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Path"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    }
   },
   "put": {
    "summary": "Passthrough",
    "description": "Everything else (Responses API, embeddings, model list...) passes through untouched,\nstreamed byte for byte so streaming keeps working on every endpoint.",
    "operationId": "v1_path_put",
    "parameters": [
     {
      "name": "path",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Path"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    }
   },
   "patch": {
    "summary": "Passthrough",
    "description": "Everything else (Responses API, embeddings, model list...) passes through untouched,\nstreamed byte for byte so streaming keeps working on every endpoint.",
    "operationId": "v1_path_patch",
    "parameters": [
     {
      "name": "path",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Path"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    }
   },
   "delete": {
    "summary": "Passthrough",
    "description": "Everything else (Responses API, embeddings, model list...) passes through untouched,\nstreamed byte for byte so streaming keeps working on every endpoint.",
    "operationId": "v1_path_delete",
    "parameters": [
     {
      "name": "path",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Path"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    }
   }
  },
  "/anthropic/v1/messages": {
   "post": {
    "summary": "Anthropic Messages",
    "description": "Anthropic's Messages API. Point the Anthropic SDK's base URL at http://wallras:8080/anthropic.",
    "operationId": "anthropic_messages_anthropic_v1_messages_post",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    }
   }
  },
  "/anthropic/{path}": {
   "get": {
    "summary": "Anthropic Other",
    "description": "Token counting, model lists, batches...: passed through untouched.",
    "operationId": "anthropic_path_get",
    "parameters": [
     {
      "name": "path",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Path"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    }
   },
   "post": {
    "summary": "Anthropic Other",
    "description": "Token counting, model lists, batches...: passed through untouched.",
    "operationId": "anthropic_path_post",
    "parameters": [
     {
      "name": "path",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Path"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    }
   },
   "delete": {
    "summary": "Anthropic Other",
    "description": "Token counting, model lists, batches...: passed through untouched.",
    "operationId": "anthropic_path_delete",
    "parameters": [
     {
      "name": "path",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Path"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    }
   }
  },
  "/gemini/{path}": {
   "get": {
    "summary": "Gemini",
    "description": "Google's Gemini API (and Vertex AI paths). Point the Google SDK's base URL at\nhttp://wallras:8080/gemini. generateContent and streamGenerateContent are recorded.",
    "operationId": "gemini_path_get",
    "parameters": [
     {
      "name": "path",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Path"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    }
   },
   "post": {
    "summary": "Gemini",
    "description": "Google's Gemini API (and Vertex AI paths). Point the Google SDK's base URL at\nhttp://wallras:8080/gemini. generateContent and streamGenerateContent are recorded.",
    "operationId": "gemini_path_post",
    "parameters": [
     {
      "name": "path",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Path"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    }
   },
   "delete": {
    "summary": "Gemini",
    "description": "Google's Gemini API (and Vertex AI paths). Point the Google SDK's base URL at\nhttp://wallras:8080/gemini. generateContent and streamGenerateContent are recorded.",
    "operationId": "gemini_path_delete",
    "parameters": [
     {
      "name": "path",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Path"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    }
   }
  },
  "/wallras/ready": {
   "get": {
    "summary": "Ready",
    "description": "Readiness for load balancers and Kubernetes: the database can be written. No token.\n(/wallras/health only says the process is up.)",
    "operationId": "ready_wallras_ready_get",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    }
   }
  },
  "/wallras/audit": {
   "get": {
    "summary": "Audit Log",
    "description": "Who did what: admin actions with the token name, plus licenses, deletions and resets.",
    "operationId": "audit_log_wallras_audit_get",
    "parameters": [
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "default": 100,
       "title": "Limit"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/backup": {
   "post": {
    "summary": "Backup",
    "description": "A consistent copy of the database while Wallras keeps running (admin only). Saved in\nWALLRAS_BACKUP_DIR, never at a path from the request. Comes with a receipt so a restored\ncopy can be checked against it.",
    "operationId": "backup_wallras_backup_post",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/health": {
   "get": {
    "summary": "Health",
    "operationId": "health_wallras_health_get",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    }
   }
  },
  "/wallras/status": {
   "get": {
    "summary": "Status",
    "operationId": "status_wallras_status_get",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/drift": {
   "get": {
    "summary": "Drift",
    "operationId": "drift_wallras_drift_get",
    "parameters": [
     {
      "name": "model",
      "in": "query",
      "required": false,
      "schema": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "null"
        }
       ],
       "title": "Model"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/baseline/reset": {
   "post": {
    "summary": "Baseline Reset",
    "description": "Accept current behaviour as the new normal (e.g. after an intended upgrade): for every model, one\nmodel, or one app's use of a model.",
    "operationId": "baseline_reset_wallras_baseline_reset_post",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/BaselineReset"
       }
      }
     },
     "required": true
    },
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/feedback": {
   "post": {
    "summary": "Feedback",
    "operationId": "feedback_wallras_feedback_post",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/Feedback"
       }
      }
     },
     "required": true
    },
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/swap-diff": {
   "post": {
    "summary": "Swap Diff",
    "operationId": "swap_diff_wallras_swap_diff_post",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/SwapRequest"
       }
      }
     },
     "required": true
    },
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/fleet": {
   "get": {
    "summary": "Fleet View",
    "description": "Every Wallras process writing to this database: each container and worker behind your load balancer,\nits version, when it last checked in and how many requests it answered. One hash chain covers them all.",
    "operationId": "fleet_view_wallras_fleet_get",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/snapshot": {
   "post": {
    "summary": "Snapshot Now",
    "operationId": "snapshot_now_wallras_snapshot_post",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/confidence": {
   "get": {
    "summary": "Confidence Report",
    "operationId": "confidence_report_wallras_confidence_get",
    "parameters": [
     {
      "name": "days",
      "in": "query",
      "required": false,
      "schema": {
       "type": "number",
       "default": 30,
       "title": "Days"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/usage": {
   "get": {
    "summary": "Usage View",
    "description": "Requests, errors, latency, tokens and cost by model, app or day.",
    "operationId": "usage_view_wallras_usage_get",
    "parameters": [
     {
      "name": "hours",
      "in": "query",
      "required": false,
      "schema": {
       "type": "number",
       "default": 24,
       "title": "Hours"
      }
     },
     {
      "name": "by",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "default": "model",
       "title": "By"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/requests": {
   "get": {
    "summary": "Request Log",
    "description": "The request log, newest first. Filter by model, app (app_name), status (ok or error), or\ntext in the question or answer (q: every word, or \"quoted phrase\", must appear, in any order,\nignoring case). Page with before=next_before.",
    "operationId": "request_log_wallras_requests_get",
    "parameters": [
     {
      "name": "model",
      "in": "query",
      "required": false,
      "schema": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "null"
        }
       ],
       "title": "Model"
      }
     },
     {
      "name": "app_name",
      "in": "query",
      "required": false,
      "schema": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "null"
        }
       ],
       "title": "App Name"
      }
     },
     {
      "name": "status",
      "in": "query",
      "required": false,
      "schema": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "null"
        }
       ],
       "title": "Status"
      }
     },
     {
      "name": "q",
      "in": "query",
      "required": false,
      "schema": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "null"
        }
       ],
       "title": "Q"
      }
     },
     {
      "name": "hours",
      "in": "query",
      "required": false,
      "schema": {
       "anyOf": [
        {
         "type": "number"
        },
        {
         "type": "null"
        }
       ],
       "title": "Hours"
      }
     },
     {
      "name": "before",
      "in": "query",
      "required": false,
      "schema": {
       "anyOf": [
        {
         "type": "number"
        },
        {
         "type": "null"
        }
       ],
       "title": "Before"
      }
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "default": 50,
       "title": "Limit"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/metrics": {
   "get": {
    "summary": "Prometheus Metrics",
    "description": "Prometheus / OpenMetrics text, for Grafana, Datadog and anything that scrapes Prometheus.",
    "operationId": "prometheus_metrics_wallras_metrics_get",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/events/{event_id}/replay": {
   "post": {
    "summary": "Replay",
    "description": "Debug one step: send a recorded request again, with a different model, system prompt,\nmessages or settings, and see the new answer beside the original. Not recorded as traffic.",
    "operationId": "replay_wallras_events__event_id__replay_post",
    "parameters": [
     {
      "name": "event_id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Event Id"
      }
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/ReplayIn"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/events/{event_id}": {
   "get": {
    "summary": "Event Detail",
    "operationId": "event_detail_wallras_events__event_id__get",
    "parameters": [
     {
      "name": "event_id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Event Id"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/blind-spots": {
   "get": {
    "summary": "Blind Spots",
    "operationId": "blind_spots_wallras_blind_spots_get",
    "parameters": [
     {
      "name": "days",
      "in": "query",
      "required": false,
      "schema": {
       "type": "number",
       "default": 30,
       "title": "Days"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/canaries": {
   "get": {
    "summary": "List Canaries",
    "operationId": "wallras_canaries_get",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   },
   "post": {
    "summary": "Add Canary",
    "operationId": "wallras_canaries_post",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/Canary"
       }
      }
     },
     "required": true
    },
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/canaries/{cid}": {
   "delete": {
    "summary": "Remove Canary",
    "operationId": "remove_canary_wallras_canaries__cid__delete",
    "parameters": [
     {
      "name": "cid",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Cid"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/canaries/run": {
   "post": {
    "summary": "Run Canaries Now",
    "operationId": "run_canaries_now_wallras_canaries_run_post",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/traces": {
   "get": {
    "summary": "Traces",
    "description": "Agent runs, newest first, with steps, timing, tokens, tool calls and problems.",
    "operationId": "traces_wallras_traces_get",
    "parameters": [
     {
      "name": "days",
      "in": "query",
      "required": false,
      "schema": {
       "type": "number",
       "default": 7,
       "title": "Days"
      }
     },
     {
      "name": "status",
      "in": "query",
      "required": false,
      "schema": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "null"
        }
       ],
       "title": "Status"
      }
     },
     {
      "name": "model",
      "in": "query",
      "required": false,
      "schema": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "null"
        }
       ],
       "title": "Model"
      }
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "default": 100,
       "title": "Limit"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/traces/{trace_id}/steps": {
   "post": {
    "summary": "Trace Add Step",
    "description": "Your app reports a step Wallras can't see (a tool it ran, a database lookup, an API\ncall). Timing and outcome only: send an error type, never payloads. App token works.",
    "operationId": "trace_add_step_wallras_traces__trace_id__steps_post",
    "parameters": [
     {
      "name": "trace_id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Trace Id"
      }
     }
    ],
    "requestBody": {
     "required": true,
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/AppStepIn"
       }
      }
     }
    },
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/otlp/v1/traces": {
   "post": {
    "summary": "Otlp Traces",
    "description": "OpenTelemetry OTLP/HTTP trace export (protobuf or JSON). App token works.\nOnly span shapes are kept: names, kinds, timing, status, models and token counts.",
    "operationId": "otlp_traces_wallras_otlp_v1_traces_post",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/traces/compare": {
   "get": {
    "summary": "Traces Compare",
    "description": "Two runs side by side: where they first differ and which tools only one used.",
    "operationId": "traces_compare_wallras_traces_compare_get",
    "parameters": [
     {
      "name": "a",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "title": "A"
      }
     },
     {
      "name": "b",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "title": "B"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/traces/{trace_id}": {
   "get": {
    "summary": "Trace Detail",
    "operationId": "trace_detail_wallras_traces__trace_id__get",
    "parameters": [
     {
      "name": "trace_id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Trace Id"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/integrity": {
   "get": {
    "summary": "Integrity",
    "operationId": "integrity_wallras_integrity_get",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/integrity/verify": {
   "post": {
    "summary": "Integrity Verify",
    "description": "Check the records against receipts you kept outside this server.",
    "operationId": "integrity_verify_wallras_integrity_verify_post",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/Receipts"
       }
      }
     },
     "required": true
    },
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/integrity/receipt": {
   "get": {
    "summary": "Integrity Receipt",
    "operationId": "integrity_receipt_wallras_integrity_receipt_get",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/integrity/send-receipt": {
   "post": {
    "summary": "Send Receipt Now",
    "operationId": "send_receipt_now_wallras_integrity_send_receipt_post",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/redact": {
   "post": {
    "summary": "Redact",
    "description": "Remove stored content, e.g. for a data deletion request. Find records by id, or by\ntext they contain (an email address, a customer number). Fingerprints stay, so the\ntamper check still verifies, and the redaction is logged. Removal can't be undone, so\nuse \"preview\": true first to see how many records match.",
    "operationId": "redact_wallras_redact_post",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/Redact"
       }
      }
     },
     "required": true
    },
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/report": {
   "get": {
    "summary": "Compliance Report",
    "operationId": "compliance_report_wallras_report_get",
    "parameters": [
     {
      "name": "days",
      "in": "query",
      "required": false,
      "schema": {
       "type": "number",
       "default": 30,
       "title": "Days"
      }
     },
     {
      "name": "format",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "default": "html",
       "title": "Format"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/plan": {
   "get": {
    "summary": "Plan Summary",
    "operationId": "plan_summary_wallras_plan_get",
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/license": {
   "post": {
    "summary": "Install License",
    "description": "Paste a license key from your Wallras account. Takes effect immediately.",
    "operationId": "install_license_wallras_license_post",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/LicenseIn"
       }
      }
     },
     "required": true
    },
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/internals": {
   "post": {
    "summary": "Internals",
    "description": "From the Wallras SDK next to a self-hosted model: what the model computed for an answer.\nAttach to a request that went through the proxy (event_id), or send the whole answer for\nmodels that never pass through it.",
    "operationId": "internals_wallras_internals_post",
    "requestBody": {
     "content": {
      "application/json": {
       "schema": {
        "$ref": "#/components/schemas/Internals"
       }
      }
     },
     "required": true
    },
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/events/{event_id}/explain": {
   "get": {
    "summary": "Explain Event",
    "description": "How the model arrived at this answer: token choices, forks, guessed phrases, the layer\nwhere decisions formed, what it attended to, and its reasoning checked against the answer.",
    "operationId": "explain_event_wallras_events__event_id__explain_get",
    "parameters": [
     {
      "name": "event_id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "title": "Event Id"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/decisions": {
   "get": {
    "summary": "Decisions",
    "description": "Recent answers with a decision record, shakiest first: most forks per token.",
    "operationId": "decisions_wallras_decisions_get",
    "parameters": [
     {
      "name": "days",
      "in": "query",
      "required": false,
      "schema": {
       "type": "number",
       "default": 7,
       "title": "Days"
      }
     },
     {
      "name": "limit",
      "in": "query",
      "required": false,
      "schema": {
       "type": "integer",
       "default": 50,
       "title": "Limit"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  },
  "/wallras/inside-out": {
   "get": {
    "summary": "Inside Out",
    "operationId": "inside_out_wallras_inside_out_get",
    "parameters": [
     {
      "name": "days",
      "in": "query",
      "required": false,
      "schema": {
       "type": "number",
       "default": 30,
       "title": "Days"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Successful Response",
      "content": {
       "application/json": {
        "schema": {}
       }
      }
     },
     "422": {
      "description": "Validation Error",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HTTPValidationError"
        }
       }
      }
     }
    },
    "security": [
     {
      "WallrasToken": []
     }
    ]
   }
  }
 },
 "components": {
  "schemas": {
   "AppStepIn": {
    "properties": {
     "name": {
      "type": "string",
      "maxLength": 80,
      "minLength": 1,
      "title": "Name"
     },
     "kind": {
      "type": "string",
      "pattern": "^(tool|retrieval|api|database|custom)$",
      "title": "Kind",
      "default": "tool"
     },
     "started": {
      "anyOf": [
       {
        "type": "number"
       },
       {
        "type": "null"
       }
      ],
      "title": "Started"
     },
     "duration_ms": {
      "type": "number",
      "maximum": 3600000.0,
      "minimum": 0.0,
      "title": "Duration Ms",
      "default": 0
     },
     "status": {
      "type": "string",
      "pattern": "^(ok|error)$",
      "title": "Status",
      "default": "ok"
     },
     "error": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 200
       },
       {
        "type": "null"
       }
      ],
      "title": "Error"
     }
    },
    "type": "object",
    "required": [
     "name"
    ],
    "title": "AppStepIn"
   },
   "BaselineReset": {
    "properties": {
     "model": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "type": "null"
       }
      ],
      "title": "Model"
     },
     "app": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 40
       },
       {
        "type": "null"
       }
      ],
      "title": "App"
     }
    },
    "type": "object",
    "title": "BaselineReset"
   },
   "Canary": {
    "properties": {
     "question": {
      "type": "string",
      "maxLength": 4000,
      "minLength": 1,
      "title": "Question"
     },
     "expect_type": {
      "type": "string",
      "pattern": "^(contains|exact|regex|number)$",
      "title": "Expect Type"
     },
     "expect_value": {
      "type": "string",
      "maxLength": 1000,
      "minLength": 1,
      "title": "Expect Value"
     },
     "model": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "type": "null"
       }
      ],
      "title": "Model"
     },
     "topic": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 80
       },
       {
        "type": "null"
       }
      ],
      "title": "Topic"
     }
    },
    "type": "object",
    "required": [
     "question",
     "expect_type",
     "expect_value"
    ],
    "title": "Canary"
   },
   "Candidate": {
    "properties": {
     "model": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 200
       },
       {
        "type": "null"
       }
      ],
      "title": "Model"
     },
     "system": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 50000
       },
       {
        "type": "null"
       }
      ],
      "title": "System"
     },
     "label": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 80
       },
       {
        "type": "null"
       }
      ],
      "title": "Label"
     },
     "provider": {
      "anyOf": [
       {
        "type": "string",
        "pattern": "^(openai|anthropic|gemini)$"
       },
       {
        "type": "null"
       }
      ],
      "title": "Provider"
     },
     "prompt": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 90
       },
       {
        "type": "null"
       }
      ],
      "title": "Prompt"
     },
     "vars": {
      "anyOf": [
       {
        "additionalProperties": {
         "type": "string"
        },
        "type": "object"
       },
       {
        "type": "null"
       }
      ],
      "title": "Vars"
     }
    },
    "type": "object",
    "title": "Candidate"
   },
   "CompareIn": {
    "properties": {
     "candidates": {
      "items": {
       "$ref": "#/components/schemas/Candidate"
      },
      "type": "array",
      "maxItems": 6,
      "minItems": 1,
      "title": "Candidates"
     },
     "judge_model": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 200
       },
       {
        "type": "null"
       }
      ],
      "title": "Judge Model"
     },
     "calibrate": {
      "type": "boolean",
      "title": "Calibrate",
      "default": false
     },
     "save_as": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 120
       },
       {
        "type": "null"
       }
      ],
      "title": "Save As"
     }
    },
    "type": "object",
    "required": [
     "candidates"
    ],
    "title": "CompareIn"
   },
   "DatasetIn": {
    "properties": {
     "name": {
      "type": "string",
      "maxLength": 80,
      "minLength": 1,
      "pattern": "^[A-Za-z0-9_.-]+$",
      "title": "Name"
     },
     "check": {
      "type": "string",
      "title": "Check",
      "default": "similar"
     },
     "value": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "additionalProperties": true,
        "type": "object"
       },
       {
        "type": "null"
       }
      ],
      "title": "Value"
     }
    },
    "type": "object",
    "required": [
     "name"
    ],
    "title": "DatasetIn"
   },
   "DatasetItemsIn": {
    "properties": {
     "event_ids": {
      "items": {
       "type": "string"
      },
      "type": "array",
      "maxItems": 500,
      "title": "Event Ids"
     },
     "trace_id": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 200
       },
       {
        "type": "null"
       }
      ],
      "title": "Trace Id"
     },
     "from_feedback": {
      "anyOf": [
       {
        "type": "string",
        "pattern": "^correct$"
       },
       {
        "type": "null"
       }
      ],
      "title": "From Feedback"
     },
     "limit": {
      "type": "integer",
      "maximum": 500.0,
      "minimum": 1.0,
      "title": "Limit",
      "default": 100
     },
     "check": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "type": "null"
       }
      ],
      "title": "Check"
     },
     "value": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "additionalProperties": true,
        "type": "object"
       },
       {
        "type": "null"
       }
      ],
      "title": "Value"
     }
    },
    "type": "object",
    "title": "DatasetItemsIn"
   },
   "DatasetRunIn": {
    "properties": {
     "model": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 200
       },
       {
        "type": "null"
       }
      ],
      "title": "Model"
     },
     "fail_below": {
      "anyOf": [
       {
        "type": "number",
        "maximum": 1.0,
        "minimum": 0.0
       },
       {
        "type": "null"
       }
      ],
      "title": "Fail Below"
     },
     "judge_model": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 200
       },
       {
        "type": "null"
       }
      ],
      "title": "Judge Model"
     },
     "calibrate": {
      "type": "boolean",
      "title": "Calibrate",
      "default": false
     },
     "system": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 50000
       },
       {
        "type": "null"
       }
      ],
      "title": "System"
     },
     "provider": {
      "anyOf": [
       {
        "type": "string",
        "pattern": "^(openai|anthropic|gemini)$"
       },
       {
        "type": "null"
       }
      ],
      "title": "Provider"
     }
    },
    "type": "object",
    "title": "DatasetRunIn"
   },
   "Feedback": {
    "properties": {
     "event_id": {
      "type": "string",
      "maxLength": 64,
      "minLength": 1,
      "title": "Event Id"
     },
     "correct": {
      "type": "boolean",
      "title": "Correct"
     },
     "note": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 2000
       },
       {
        "type": "null"
       }
      ],
      "title": "Note"
     }
    },
    "type": "object",
    "required": [
     "event_id",
     "correct"
    ],
    "title": "Feedback"
   },
   "GateIn": {
    "properties": {
     "dataset": {
      "type": "string",
      "maxLength": 80,
      "minLength": 1,
      "title": "Dataset"
     },
     "fail_below": {
      "type": "number",
      "maximum": 1.0,
      "minimum": 0.0,
      "title": "Fail Below",
      "default": 1.0
     },
     "model": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 200
       },
       {
        "type": "null"
       }
      ],
      "title": "Model"
     },
     "judge_model": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 200
       },
       {
        "type": "null"
       }
      ],
      "title": "Judge Model"
     },
     "vars": {
      "anyOf": [
       {
        "additionalProperties": {
         "type": "string"
        },
        "type": "object"
       },
       {
        "type": "null"
       }
      ],
      "title": "Vars"
     }
    },
    "type": "object",
    "required": [
     "dataset"
    ],
    "title": "GateIn"
   },
   "HTTPValidationError": {
    "properties": {
     "detail": {
      "items": {
       "$ref": "#/components/schemas/ValidationError"
      },
      "type": "array",
      "title": "Detail"
     }
    },
    "type": "object",
    "title": "HTTPValidationError"
   },
   "Internals": {
    "properties": {
     "event_id": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 64
       },
       {
        "type": "null"
       }
      ],
      "title": "Event Id"
     },
     "model": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 200
       },
       {
        "type": "null"
       }
      ],
      "title": "Model"
     },
     "prompt": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 20000
       },
       {
        "type": "null"
       }
      ],
      "title": "Prompt"
     },
     "answer": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 50000
       },
       {
        "type": "null"
       }
      ],
      "title": "Answer"
     },
     "topic": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 80
       },
       {
        "type": "null"
       }
      ],
      "title": "Topic"
     },
     "tokens": {
      "items": {
       "additionalProperties": true,
       "type": "object"
      },
      "type": "array",
      "maxItems": 20000,
      "title": "Tokens"
     },
     "probe_score": {
      "anyOf": [
       {
        "type": "number",
        "maximum": 1.0,
        "minimum": 0.0
       },
       {
        "type": "null"
       }
      ],
      "title": "Probe Score"
     },
     "prompt_tokens": {
      "items": {
       "type": "string"
      },
      "type": "array",
      "maxItems": 8000,
      "title": "Prompt Tokens"
     },
     "layers": {
      "anyOf": [
       {
        "type": "integer",
        "maximum": 1000.0,
        "minimum": 1.0
       },
       {
        "type": "null"
       }
      ],
      "title": "Layers"
     },
     "reasoning": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 50000
       },
       {
        "type": "null"
       }
      ],
      "title": "Reasoning"
     }
    },
    "type": "object",
    "title": "Internals"
   },
   "LabelIn": {
    "properties": {
     "label": {
      "type": "string",
      "maxLength": 40,
      "minLength": 1,
      "title": "Label",
      "default": "production"
     }
    },
    "type": "object",
    "title": "LabelIn"
   },
   "LicenseIn": {
    "properties": {
     "token": {
      "type": "string",
      "maxLength": 8000,
      "minLength": 10,
      "title": "Token"
     }
    },
    "type": "object",
    "required": [
     "token"
    ],
    "title": "LicenseIn"
   },
   "PromoteIn": {
    "properties": {
     "version": {
      "type": "integer",
      "minimum": 1.0,
      "title": "Version"
     },
     "label": {
      "type": "string",
      "maxLength": 40,
      "minLength": 1,
      "title": "Label",
      "default": "production"
     },
     "gate": {
      "anyOf": [
       {
        "$ref": "#/components/schemas/GateIn"
       },
       {
        "type": "null"
       }
      ]
     },
     "reason": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 500
       },
       {
        "type": "null"
       }
      ],
      "title": "Reason"
     },
     "wait": {
      "type": "boolean",
      "title": "Wait",
      "default": true
     }
    },
    "type": "object",
    "required": [
     "version"
    ],
    "title": "PromoteIn"
   },
   "PromptIn": {
    "properties": {
     "name": {
      "type": "string",
      "maxLength": 80,
      "minLength": 1,
      "title": "Name"
     },
     "messages": {
      "anyOf": [
       {
        "items": {
         "additionalProperties": true,
         "type": "object"
        },
        "type": "array",
        "maxItems": 200
       },
       {
        "type": "null"
       }
      ],
      "title": "Messages"
     },
     "system": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 200000
       },
       {
        "type": "null"
       }
      ],
      "title": "System"
     },
     "model": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 200
       },
       {
        "type": "null"
       }
      ],
      "title": "Model"
     },
     "params": {
      "anyOf": [
       {
        "additionalProperties": true,
        "type": "object"
       },
       {
        "type": "null"
       }
      ],
      "title": "Params"
     },
     "note": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 500
       },
       {
        "type": "null"
       }
      ],
      "title": "Note"
     },
     "base_version": {
      "anyOf": [
       {
        "type": "integer",
        "minimum": 0.0
       },
       {
        "type": "null"
       }
      ],
      "title": "Base Version"
     }
    },
    "type": "object",
    "required": [
     "name"
    ],
    "title": "PromptIn"
   },
   "Receipts": {
    "properties": {
     "receipts": {
      "items": {
       "additionalProperties": true,
       "type": "object"
      },
      "type": "array",
      "maxItems": 1000,
      "title": "Receipts"
     }
    },
    "type": "object",
    "title": "Receipts"
   },
   "Redact": {
    "properties": {
     "event_ids": {
      "items": {
       "type": "string"
      },
      "type": "array",
      "maxItems": 10000,
      "title": "Event Ids"
     },
     "containing": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 500,
        "minLength": 3
       },
       {
        "type": "null"
       }
      ],
      "title": "Containing"
     },
     "reason": {
      "type": "string",
      "maxLength": 500,
      "minLength": 3,
      "title": "Reason"
     },
     "preview": {
      "type": "boolean",
      "title": "Preview",
      "default": false
     },
     "confirm_many": {
      "type": "boolean",
      "title": "Confirm Many",
      "default": false
     }
    },
    "type": "object",
    "required": [
     "reason"
    ],
    "title": "Redact"
   },
   "ReplayIn": {
    "properties": {
     "model": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 200
       },
       {
        "type": "null"
       }
      ],
      "title": "Model"
     },
     "system": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 50000
       },
       {
        "type": "null"
       }
      ],
      "title": "System"
     },
     "messages": {
      "anyOf": [
       {
        "items": {
         "additionalProperties": true,
         "type": "object"
        },
        "type": "array",
        "maxItems": 500
       },
       {
        "type": "null"
       }
      ],
      "title": "Messages"
     },
     "temperature": {
      "anyOf": [
       {
        "type": "number",
        "maximum": 2.0,
        "minimum": 0.0
       },
       {
        "type": "null"
       }
      ],
      "title": "Temperature"
     },
     "max_tokens": {
      "anyOf": [
       {
        "type": "integer",
        "maximum": 200000.0,
        "minimum": 1.0
       },
       {
        "type": "null"
       }
      ],
      "title": "Max Tokens"
     },
     "provider": {
      "anyOf": [
       {
        "type": "string",
        "pattern": "^(openai|anthropic|gemini)$"
       },
       {
        "type": "null"
       }
      ],
      "title": "Provider"
     }
    },
    "type": "object",
    "title": "ReplayIn"
   },
   "ReviewAddIn": {
    "properties": {
     "event_id": {
      "type": "string",
      "maxLength": 64,
      "minLength": 1,
      "title": "Event Id"
     },
     "note": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 500
       },
       {
        "type": "null"
       }
      ],
      "title": "Note"
     }
    },
    "type": "object",
    "required": [
     "event_id"
    ],
    "title": "ReviewAddIn"
   },
   "ReviewDecisionIn": {
    "properties": {
     "verdict": {
      "type": "string",
      "pattern": "^(correct|wrong)$",
      "title": "Verdict"
     },
     "note": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 1000
       },
       {
        "type": "null"
       }
      ],
      "title": "Note"
     },
     "accept_answer": {
      "type": "boolean",
      "title": "Accept Answer",
      "default": false
     }
    },
    "type": "object",
    "required": [
     "verdict"
    ],
    "title": "ReviewDecisionIn"
   },
   "SwapRequest": {
    "properties": {
     "candidate_model": {
      "type": "string",
      "minLength": 1,
      "title": "Candidate Model"
     },
     "current_model": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "type": "null"
       }
      ],
      "title": "Current Model"
     },
     "candidate_base_url": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "type": "null"
       }
      ],
      "title": "Candidate Base Url"
     },
     "candidate_api_key": {
      "anyOf": [
       {
        "type": "string"
       },
       {
        "type": "null"
       }
      ],
      "title": "Candidate Api Key"
     },
     "sample_size": {
      "type": "integer",
      "minimum": 1.0,
      "title": "Sample Size",
      "default": 30
     },
     "noise_sample": {
      "type": "integer",
      "maximum": 50.0,
      "minimum": 0.0,
      "title": "Noise Sample",
      "default": 12
     },
     "provider": {
      "anyOf": [
       {
        "type": "string",
        "pattern": "^(openai|anthropic|gemini)$"
       },
       {
        "type": "null"
       }
      ],
      "title": "Provider"
     }
    },
    "type": "object",
    "required": [
     "candidate_model"
    ],
    "title": "SwapRequest"
   },
   "ValidationError": {
    "properties": {
     "loc": {
      "items": {
       "anyOf": [
        {
         "type": "string"
        },
        {
         "type": "integer"
        }
       ]
      },
      "type": "array",
      "title": "Location"
     },
     "msg": {
      "type": "string",
      "title": "Message"
     },
     "type": {
      "type": "string",
      "title": "Error Type"
     },
     "input": {
      "title": "Input"
     },
     "ctx": {
      "type": "object",
      "title": "Context"
     }
    },
    "type": "object",
    "required": [
     "loc",
     "msg",
     "type"
    ],
    "title": "ValidationError"
   },
   "WatchIn": {
    "properties": {
     "model": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 200
       },
       {
        "type": "null"
       }
      ],
      "title": "Model"
     },
     "every_hours": {
      "type": "number",
      "maximum": 744.0,
      "minimum": 0.0,
      "title": "Every Hours",
      "default": 24
     },
     "on_swap": {
      "type": "boolean",
      "title": "On Swap",
      "default": true
     },
     "on_drift": {
      "type": "boolean",
      "title": "On Drift",
      "default": true
     },
     "judge_model": {
      "anyOf": [
       {
        "type": "string",
        "maxLength": 200
       },
       {
        "type": "null"
       }
      ],
      "title": "Judge Model"
     },
     "fail_below": {
      "anyOf": [
       {
        "type": "number",
        "maximum": 1.0,
        "minimum": 0.0
       },
       {
        "type": "null"
       }
      ],
      "title": "Fail Below"
     }
    },
    "type": "object",
    "title": "WatchIn"
   }
  },
  "securitySchemes": {
   "WallrasToken": {
    "type": "apiKey",
    "in": "header",
    "name": "X-Wallras-Token"
   }
  }
 },
 "servers": [
  {
   "url": "http://localhost:8080",
   "description": "Your Wallras (change to its address)"
  }
 ]
}
