{
  "openapi": "3.0.3",
  "info": {
    "title": "Tabby Server",
    "description": "\n[![tabby stars](https://img.shields.io/github/stars/TabbyML/tabby)](https://github.com/TabbyML/tabby)\n[![Join Slack](https://shields.io/badge/Join-Tabby%20Slack-red?logo=slack)](https://join.slack.com/t/tabbycommunity/shared_invite/zt-1xeiddizp-bciR2RtFTaJ37RBxr8VxpA)\n\nInstall following IDE / Editor extensions to get started with [Tabby](https://github.com/TabbyML/tabby).\n* [VSCode Extension](https://github.com/TabbyML/tabby/tree/main/clients/vscode) – Install from the [marketplace](https://marketplace.visualstudio.com/items?itemName=TabbyML.vscode-tabby), or [open-vsx.org](https://open-vsx.org/extension/TabbyML/vscode-tabby)\n* [VIM Extension](https://github.com/TabbyML/tabby/tree/main/clients/vim)\n* [IntelliJ Platform Plugin](https://github.com/TabbyML/tabby/tree/main/clients/intellij) – Install from the [marketplace](https://plugins.jetbrains.com/plugin/22379-tabby)\n",
    "license": { "name": "Apache 2.0", "url": "https://github.com/TabbyML/tabby/blob/main/LICENSE" },
    "version": "0.5.5"
  },
  "servers": [{ "url": "/", "description": "Server" }],
  "paths": {
    "/v1/completions": {
      "post": {
        "tags": ["v1"],
        "operationId": "completion",
        "requestBody": {
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CompletionRequest" } } },
          "required": true
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CompletionResponse" } } }
          },
          "400": { "description": "Bad Request" }
        }
      }
    },
    "/v1/events": {
      "post": {
        "tags": ["v1"],
        "operationId": "event",
        "requestBody": {
          "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LogEventRequest" } } },
          "required": true
        },
        "responses": { "200": { "description": "Success" }, "400": { "description": "Bad Request" } }
      }
    },
    "/v1/health": {
      "get": {
        "tags": ["v1"],
        "operationId": "health",
        "responses": {
          "200": {
            "description": "Success",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HealthState" } } }
          }
        }
      }
    },
    "/v1beta/search": {
      "get": {
        "tags": ["v1beta"],
        "operationId": "search",
        "parameters": [
          { "name": "q", "in": "query", "required": true, "schema": { "type": "string", "default": "get" } },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": { "type": "integer", "default": 20, "nullable": true, "minimum": 0.0 }
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "schema": { "type": "integer", "default": 0, "nullable": true, "minimum": 0.0 }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SearchResponse" } } }
          },
          "501": { "description": "When code search is not enabled, the endpoint will returns 501 Not Implemented" }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Choice": {
        "type": "object",
        "required": ["index", "text"],
        "properties": {
          "index": { "type": "integer", "format": "int32", "minimum": 0.0 },
          "text": { "type": "string" }
        }
      },
      "CompletionRequest": {
        "type": "object",
        "properties": {
          "language": {
            "type": "string",
            "description": "Language identifier, full list is maintained at\nhttps://code.visualstudio.com/docs/languages/identifiers",
            "example": "python",
            "nullable": true
          },
          "segments": { "allOf": [{ "$ref": "#/components/schemas/Segments" }], "nullable": true },
          "user": {
            "type": "string",
            "description": "A unique identifier representing your end-user, which can help Tabby to monitor & generating\nreports.",
            "nullable": true
          },
          "debug_options": { "allOf": [{ "$ref": "#/components/schemas/DebugOptions" }], "nullable": true }
        },
        "example": {
          "language": "python",
          "segments": { "prefix": "def fib(n):\n    ", "suffix": "\n        return fib(n - 1) + fib(n - 2)" }
        }
      },
      "CompletionResponse": {
        "type": "object",
        "required": ["id", "choices"],
        "properties": {
          "id": { "type": "string" },
          "choices": { "type": "array", "items": { "$ref": "#/components/schemas/Choice" } },
          "debug_data": { "allOf": [{ "$ref": "#/components/schemas/DebugData" }], "nullable": true }
        },
        "example": { "choices": [{ "index": 0, "text": "string" }], "id": "string" }
      },
      "DebugData": {
        "type": "object",
        "properties": {
          "snippets": { "type": "array", "items": { "$ref": "#/components/schemas/Snippet" }, "nullable": true },
          "prompt": { "type": "string", "nullable": true }
        }
      },
      "DebugOptions": {
        "type": "object",
        "properties": {
          "raw_prompt": {
            "type": "string",
            "description": "When `raw_prompt` is specified, it will be passed directly to the inference engine for completion. `segments` field in `CompletionRequest` will be ignored.\n\nThis is useful for certain requests that aim to test the tabby's e2e quality.",
            "nullable": true
          },
          "return_snippets": { "type": "boolean", "description": "When true, returns `snippets` in `debug_data`." },
          "return_prompt": { "type": "boolean", "description": "When true, returns `prompt` in `debug_data`." },
          "disable_retrieval_augmented_code_completion": {
            "type": "boolean",
            "description": "When true, disable retrieval augmented code completion."
          }
        }
      },
      "HealthState": {
        "type": "object",
        "required": ["model", "device", "arch", "cpu_info", "cpu_count", "cuda_devices", "version"],
        "properties": {
          "model": { "type": "string" },
          "chat_model": { "type": "string", "nullable": true },
          "device": { "type": "string" },
          "arch": { "type": "string" },
          "cpu_info": { "type": "string" },
          "cpu_count": { "type": "integer", "minimum": 0.0 },
          "cuda_devices": { "type": "array", "items": { "type": "string" } },
          "version": { "$ref": "#/components/schemas/Version" }
        }
      },
      "Hit": {
        "type": "object",
        "required": ["score", "doc", "id"],
        "properties": {
          "score": { "type": "number", "format": "float" },
          "doc": { "$ref": "#/components/schemas/HitDocument" },
          "id": { "type": "integer", "format": "int32", "minimum": 0.0 }
        }
      },
      "HitDocument": {
        "type": "object",
        "required": ["body", "filepath", "git_url", "kind", "language", "name"],
        "properties": {
          "body": { "type": "string" },
          "filepath": { "type": "string" },
          "git_url": { "type": "string" },
          "kind": { "type": "string" },
          "language": { "type": "string" },
          "name": { "type": "string" }
        }
      },
      "LogEventRequest": {
        "type": "object",
        "required": ["type", "completion_id", "choice_index"],
        "properties": {
          "type": { "type": "string", "description": "Event type, should be `view` or `select`.", "example": "view" },
          "completion_id": { "type": "string" },
          "choice_index": { "type": "integer", "format": "int32", "minimum": 0.0 }
        }
      },
      "SearchResponse": {
        "type": "object",
        "required": ["num_hits", "hits"],
        "properties": {
          "num_hits": { "type": "integer", "minimum": 0.0 },
          "hits": { "type": "array", "items": { "$ref": "#/components/schemas/Hit" } }
        }
      },
      "Segments": {
        "type": "object",
        "required": ["prefix"],
        "properties": {
          "prefix": { "type": "string", "description": "Content that appears before the cursor in the editor window." },
          "suffix": {
            "type": "string",
            "description": "Content that appears after the cursor in the editor window.",
            "nullable": true
          }
        }
      },
      "Snippet": {
        "type": "object",
        "required": ["filepath", "body", "score"],
        "properties": {
          "filepath": { "type": "string" },
          "body": { "type": "string" },
          "score": { "type": "number", "format": "float" }
        }
      },
      "Version": {
        "type": "object",
        "required": ["build_date", "build_timestamp", "git_sha", "git_describe"],
        "properties": {
          "build_date": { "type": "string" },
          "build_timestamp": { "type": "string" },
          "git_sha": { "type": "string" },
          "git_describe": { "type": "string" }
        }
      }
    }
  }
}
