From c01ca0b6b55d3229fef580550d0682feb4bd696d Mon Sep 17 00:00:00 2001 From: Viktor Date: Wed, 14 Oct 2026 19:44:16 -0700 Subject: [PATCH 1/2] docs: document behavior that changed in v2.4.0-rc.2 Update website/docs for behavior that differs between v2.4.0-rc.1 and v2.4.0-rc.2: acceleration settings applied on restart, deletion_mode auto, snapshots and the startup check under runtime.state, results cache aging on TTL, non-deterministic queries, Server-Timing, Flight error codes and TLS handshake timeout, HTTP rate control across shared origins and instances, Iceberg Hadoop metadata, NSQL reasoning_effort, /v1/decisions, and rrf() named arguments. Sync the OpenAPI spec for rc.2 API changes and regenerate the affected API pages. Remove the v2.4.0-rc.1 migration and history notes so the pages describe current behavior only. --- .../get-iceberg-namespaces.StatusCodes.json | 2 +- .../api/HTTP/get-iceberg-namespaces.api.mdx | 2 +- .../api/HTTP/get-namespace.StatusCodes.json | 2 +- website/docs/api/HTTP/get-namespace.api.mdx | 12 +- .../docs/api/HTTP/get-table.StatusCodes.json | 2 +- website/docs/api/HTTP/get-table.api.mdx | 21 +- .../post-chat-completions.RequestSchema.json | 2 +- .../post-chat-completions.StatusCodes.json | 2 +- .../api/HTTP/post-chat-completions.api.mdx | 2 +- .../HTTP/post-decisions.RequestSchema.json | 1 + .../api/HTTP/post-decisions.StatusCodes.json | 1 + website/docs/api/HTTP/post-decisions.api.mdx | 74 + .../api/HTTP/post-nsql.RequestSchema.json | 2 +- website/docs/api/HTTP/post-nsql.api.mdx | 2 +- .../HTTP/post-responses.RequestSchema.json | 2 +- .../api/HTTP/post-responses.StatusCodes.json | 2 +- website/docs/api/HTTP/post-responses.api.mdx | 2 +- .../docs/api/HTTP/post-sql.StatusCodes.json | 2 +- website/docs/api/HTTP/post-sql.api.mdx | 2 +- website/docs/api/HTTP/sidebar.ts | 10 +- website/docs/api/overview.md | 12 + website/docs/api/tls/index.md | 4 + website/docs/components/catalogs/iceberg.md | 2 +- .../data-accelerators/cayenne/deployment.md | 2 +- .../data-accelerators/cayenne/index.md | 55 +- .../data-accelerators/cayenne/performance.md | 6 +- .../data-connectors/https/deployment.md | 4 +- .../components/data-connectors/huggingface.md | 8 + .../components/data-connectors/iceberg.md | 10 +- .../components/data-connectors/sharepoint.md | 2 + website/docs/components/tools/mcp.md | 6 - website/docs/features/caching/index.md | 101 +- .../data-acceleration/data-refresh.md | 4 +- .../data-acceleration/partitioning.md | 8 +- .../features/data-acceleration/snapshots.md | 23 +- .../docs/features/distributed-query/index.md | 2 + .../large-language-models/decisions.md | 12 +- .../features/large-language-models/mcp.md | 6 - .../parameter_overrides.md | 10 + .../features/large-language-models/tools.md | 2 +- website/docs/features/observability/index.md | 11 +- website/docs/features/views/index.md | 10 + website/docs/reference/spicepod/runtime.md | 56 +- .../docs/reference/sql/prepared_statements.md | 2 + website/docs/reference/sql/search.md | 4 +- website/docs/troubleshooting/index.md | 2 +- website/public/openapi.json | 2844 +++++++++++++++-- 47 files changed, 2873 insertions(+), 482 deletions(-) create mode 100644 website/docs/api/HTTP/post-decisions.RequestSchema.json create mode 100644 website/docs/api/HTTP/post-decisions.StatusCodes.json create mode 100644 website/docs/api/HTTP/post-decisions.api.mdx diff --git a/website/docs/api/HTTP/get-iceberg-namespaces.StatusCodes.json b/website/docs/api/HTTP/get-iceberg-namespaces.StatusCodes.json index 6d7846735..863788648 100644 --- a/website/docs/api/HTTP/get-iceberg-namespaces.StatusCodes.json +++ b/website/docs/api/HTTP/get-iceberg-namespaces.StatusCodes.json @@ -1 +1 @@ -{"responses":{"200":{"description":"Namespaces retrieved successfully","content":{"application/json":{"schema":{"type":"object","required":["namespaces"],"properties":{"namespaces":{"type":"array","items":{"type":"object","required":["parts"],"properties":{"parts":{"type":"array","items":{"type":"string"}}},"title":"Namespace"}}},"title":"NamespacesResponse"},"example":{"namespaces":[{"parts":["catalog_a"]},{"parts":["catalog_b","schema_1"]}]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message","type","code"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"message":{"type":"string"},"type":{"type":"string","enum":["NoSuchNamespaceException","BadRequestException","InternalServerError"],"title":"IcebergErrorType"}},"title":"IcebergError"}},"title":"IcebergResponseError"},"example":{"error":{"message":"Invalid namespace request","type":"BadRequestException","code":400}}}}},"404":{"description":"Namespace not found","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message","type","code"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"message":{"type":"string"},"type":{"type":"string","enum":["NoSuchNamespaceException","BadRequestException","InternalServerError"],"title":"IcebergErrorType"}},"title":"IcebergError"}},"title":"IcebergResponseError"},"example":{"error":{"message":"Namespace provided does not exist","type":"NoSuchNamespaceException","code":404}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message","type","code"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"message":{"type":"string"},"type":{"type":"string","enum":["NoSuchNamespaceException","BadRequestException","InternalServerError"],"title":"IcebergErrorType"}},"title":"IcebergError"}},"title":"IcebergResponseError"},"example":{"error":{"message":"Internal Server Error: DF_SCHEMA_NOT_FOUND","type":"InternalServerError","code":500}}}}}}} \ No newline at end of file +{"responses":{"200":{"description":"Namespaces retrieved successfully","content":{"application/json":{"schema":{"type":"object","required":["namespaces"],"properties":{"namespaces":{"type":"array","items":{"type":"object","required":["parts"],"properties":{"parts":{"type":"array","items":{"type":"string"}}},"title":"Namespace"}}},"title":"NamespacesResponse"},"example":{"namespaces":[{"parts":["catalog_a"]},{"parts":["catalog_b","schema_1"]}]}}}},"400":{"description":"Bad request","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message","type","code"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"message":{"type":"string"},"type":{"type":"string","enum":["NoSuchNamespaceException","NoSuchTableException","BadRequestException","ServiceUnavailableException","InternalServerError"],"title":"IcebergErrorType"}},"title":"IcebergError"}},"title":"IcebergResponseError"},"example":{"error":{"message":"Invalid namespace request","type":"BadRequestException","code":400}}}}},"404":{"description":"Namespace not found","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message","type","code"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"message":{"type":"string"},"type":{"type":"string","enum":["NoSuchNamespaceException","NoSuchTableException","BadRequestException","ServiceUnavailableException","InternalServerError"],"title":"IcebergErrorType"}},"title":"IcebergError"}},"title":"IcebergResponseError"},"example":{"error":{"message":"Namespace provided does not exist","type":"NoSuchNamespaceException","code":404}}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message","type","code"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"message":{"type":"string"},"type":{"type":"string","enum":["NoSuchNamespaceException","NoSuchTableException","BadRequestException","ServiceUnavailableException","InternalServerError"],"title":"IcebergErrorType"}},"title":"IcebergError"}},"title":"IcebergResponseError"},"example":{"error":{"message":"Internal Server Error: DF_SCHEMA_NOT_FOUND","type":"InternalServerError","code":500}}}}}}} \ No newline at end of file diff --git a/website/docs/api/HTTP/get-iceberg-namespaces.api.mdx b/website/docs/api/HTTP/get-iceberg-namespaces.api.mdx index fb9c52ce5..5f657f314 100644 --- a/website/docs/api/HTTP/get-iceberg-namespaces.api.mdx +++ b/website/docs/api/HTTP/get-iceberg-namespaces.api.mdx @@ -5,7 +5,7 @@ description: "This endpoint retrieves namespaces available in the Iceberg catalo sidebar_label: "List Iceberg namespaces" hide_title: true hide_table_of_contents: true -api: eJztV99v2zYQ/leIe1ZsJ0uBTW9Zm24GOhdo0ifPcGjqbF1HkSxJKQkM/e/D6Yclz0ZaoAOGFX2ycUfe3ffdR+q4hyh3AdIlzBVu0O9glUCGQXlykayBFO5zCgJN5iyZKDxGT1hhEEYWGJxUGISsJGm50SjIiJij6IIJJaPUdjf508y3QooHJz2a+DDsFRSE87aiDLNEUBSPpLXQFGITR+Wks3Gm0mToG1dwqGhLmIk26AQSsA695LLnGaSww7imtpD1EAIScNLLAiN6Br4H9kEKbRhIgBj15xL9M5xygV26EYStt4V4zEnlItoDQSe1c4EeP5fkMYN0K3XABILKsZCQ7iE+O67Cbj6hikdLl1xaDNwZ5xliJAy8pTUPe6X3kmumiMXYHqIns4O6rhOIFDXbFn1dUNcrzhacNaGNezWb8c8x9MXQhB5iJkKpFIawLbXmxMqayByme5DOaVJNM6afAkfYfyXYUatOEI98X4b9X1B5zhw+dORCnQA+ycKx/xjM8lDCErpDs5awqpMz9g30ullfwqpe1U3a63NN+1VmgtFjiP9We9B7608JbM1f2FtgCHKHkLSruKIMT2M11iEUmYg79JDA1vpCxtb00xUkUJChoiwgndXJIfppt7p8J44E0PDuJSzsXanyQ8tunxS2HCbM4YeWwrF1biJ6I/Ud+gr9bU9K3/zuAmzs95xzrIyx85yj10u34Eg0B54PaGFuKqlpdNWMWt7hPY+h5fl6Nqt7CV2/cO6FsVFsbWmyH1L6XqU0NLv/KIvM8rfeRoFPNJbUCzB7XV13unp17mrqUYvQwBZtNT+U9Z0q69DuthbRbEvFm7fru9e/3/5xs168v1+/ff9x8WaQ2Lnye3W96m6thtKY227ga6a7mEMK0+pyejT1tTprv7Wl15BCHqNLp1NtldS5DTH9efbL7GTme8dukWGF2rqCR7820kS8tmZLu9KjeKSYi4eLC474MAGeqAKq0lN8bvJJR+u/kP+v2Edma5tGd5T60kQq8Oy4GRwpzMSwRJNCHibSw+R646TK8eJqwsVThibyYOyPPXUCDL8NfDWZTWYXpQmRp3b2ORtiIc0o6jsewvtB/ojJoyL3w4n9Pz0VOolFfIpTpyUZJqGRxb5T0BKqS0j+MY6yTNi1329kwI9e1zWb29cCdzqjwOiGCf8Fsr7tLXEWQSOy4SlTSV3yokaRlfTUtJtVmECOMmORLPfdrhvFN8do18n9y1EOp+2323uo678BoET2hw== +api: eJztV9tuGzcQ/RWCz7Ikuw7Q6s1NnNZAqgCx/KQKMrU7q2XKJRmSq9gQ9O+ZWe4VWjgBUqAo4CdJc+OcmcPR8MiD2Hu+WPO7BHbg9nwz4Sn4xEkbpNF8wVe59Ax0ao3UgTkITsIBPNOiAG9Fgl/FQUgldgqY1CzkwOpgLBFBKLOf/q3vMibYoxUOdHjsfBnGts4cZArphMnAvkqlmJI+VHGSXKq0f1KpU3CVyltIZCYhZTHolE+4seAEpX2XYuJ7CFsZE9l2IdAMHfBnAEfAj5x0aB7DoFoS6i8luGd+Xguoj+tByJwp2NdcJjkLpi3QWe6UoIMvpXSA2WVCeZhwn+RQCL448vBsKQuz+wxJGJiuKbXgqTNYKoQYJMJAlyjufIVzgnKWAYq+3GNGes9Pp9OEBxkUyZZNXije0GneGu1j3Kv5nD6G0JddExqIKfNlggKflUrRwYnRgWqIzsJaJZOqGbPPniIcfxBsr1VniHu678P+L0o5Jvaf6uJy1MKTKCzph2DWbQprXl+areCb02REvuMNb7aXaLI5VcdejzXtd5EyQg8+/FvtAeeMOy9gFH/HF/F6sQeUVlaUUQrnsSppFwrHDuzBoXlmXCFCFP1yhYJCalmUBV/MsQJN9PNu1eedKbAdmrzXfGnuyyRvW3b7lECs4aRWrWi89cVY2k+xsn3pPbgDzpwH3Y7EvvYOkTgtFFmBu20q2TCmnpqVfEWJ9unUV44pGpLVBgOmtc1pS4SpHISSvfnU40ldpHGEsTnItlPDu+sXhgXTJrDM4Nh+5d8r/3r86xjS/P2z1NBWgXyBJ9nn4Qu1ach4XZPxzdgQbFAzX8FmMZtXOr7SsT8Oa47EXFjltmDv3m/v3/55+9fNdvlxtX3/8WH5ruPlWPoNJd/U87HqQ8hNvY9Wy2fI8cfscDkbLKWRnHEVKJ1CkzwEu5jNlEmEyo0Pi1/nv83PVtIPpGYprmPK2II20xhpyt4ancl96QCX6pCzx4sLivg45bTweUhKJ8NzdZ6wcvsP0PcN6aTOTMWOuqSu1EEWMLoNe4v9xSWjNcF7BLTrLNrF+gYh5nBxNaXk8aajJe7tbqjBQhH8GBgF0/lFqX0gypDOIv5C6F7UD/RGaN4Zg0oOkjx21/z/9JKpKRbgKcysEvgkwSJUtDjWDFrzwyUaDrdlogmpjsed8PDg1OlE4viYoU6n0hO67gHyQrF+7qkziqAiWffSwhWkJKOKkQfhZNVuYiFCAZESSTDp6HWT0OToeZ0NbYrS3rY/blc4F74BTQwxlw== sidebar_class_name: "get api-method" info_path: docs/api/HTTP/runtime custom_edit_url: null diff --git a/website/docs/api/HTTP/get-namespace.StatusCodes.json b/website/docs/api/HTTP/get-namespace.StatusCodes.json index 5178d858e..743cc71e5 100644 --- a/website/docs/api/HTTP/get-namespace.StatusCodes.json +++ b/website/docs/api/HTTP/get-namespace.StatusCodes.json @@ -1 +1 @@ -{"responses":{"200":{"description":"Namespace exists"},"400":{"description":"Invalid namespace format"},"404":{"description":"Namespace does not exist"}}} \ No newline at end of file +{"responses":{"200":{"description":"Namespace exists","content":{"application/json":{"schema":{"type":"object","description":"The Iceberg REST `GetNamespaceResponse`.","required":["namespace"],"properties":{"namespace":{"type":"object","required":["parts"],"properties":{"parts":{"type":"array","items":{"type":"string"}}},"title":"Namespace"},"properties":{"type":["object","null"],"description":"Always `null`: Spice does not store namespace properties, and the spec\nasks a server without them to return `null` rather than `{}`.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}}},"title":"GetNamespaceResponse"},"example":{"namespace":["spice","public"],"properties":null}}}},"400":{"description":"Invalid namespace format"},"404":{"description":"Namespace does not exist"}}} \ No newline at end of file diff --git a/website/docs/api/HTTP/get-namespace.api.mdx b/website/docs/api/HTTP/get-namespace.api.mdx index 28238ef15..68b62a620 100644 --- a/website/docs/api/HTTP/get-namespace.api.mdx +++ b/website/docs/api/HTTP/get-namespace.api.mdx @@ -1,11 +1,11 @@ --- id: get-namespace -title: "Check if a namespace exists." -description: "This endpoint returns a 200 OK response if the namespace exists, otherwise it returns a 404 Not Found response." -sidebar_label: "Check if a namespace exists." +title: "Load an Iceberg namespace" +description: "Returns the namespace if it exists. Spice does not store namespace properties, so `properties` is `null`." +sidebar_label: "Load an Iceberg namespace" hide_title: true hide_table_of_contents: true -api: eJzFUsFu2zAM/RWBZ8V2gxw23YZiK4IO3SU7FUGr2ExE1JY0iXZbGP73gUmXpOmw604SRPK9R703AttdBnMPyxo3mHaw1tBgrhNFpuDBwMpRVuibGMizSsh98llZNa8q9eNWJcwx+IyKtoodKm87zNHWqPCFMmetAjtMzyQt5/OLaqHuAqtvoffNEaYADSFissK+bMDADvnhCAoa/nRmMCPMq0qO94rvLiTApGHxt8alH2xLzZnmbUid5cPA4l/ITcCsfOADBUyThg7ZhTfFoCFadmCgHK7KI34ux+N9Ag0Z04BJ/n+EPrVgwDFHU5ZtqG3rQmbzqfpcwaUn36WsGhywDbFDz+qAVKjr4Le06xOqZ2KnHmczQXwsYFoLXd0n4tc9n4308IRyX0uN/DbIwkzcIhhIvWfq8AP1yqHKkWps1KmlpRp9RpmX/cDAl2hrh7N5IeKpQc+0JUzvK5MGWf8APC+qopr1PrPdtCi1GDJ31p+hXjusnyRp9kPOikulI9TBM3r+Lxnm1yiCGV+4jK0lLwvtLR7fknEPwxVoOGUDNJhT0NcaxH/pG8eNzfgztdMkz796THvbNAw20f63xMSzBN58XcE0/QbWuFKi +api: eJy9VE1P4zAQ/SuWz/0CcdjtDa0QQkKrFbCnLqJuMm0Mjm3sSaGK8t93xg1JWqpd7WVPccbz+d7z1BLVJsr5Qt5ksIKwkY8jmUPMgvaonZVzeQdYBRsFFiCsKiF6lYHQa6FRwLuOGCfi3muy5Q6isA5FRBeGzj44DwE1xJGITiz7/6XQUSxtZcxyIkeSzYrr3uRUeQP41CWh20AnZyNQv7U8n834c9jr967kvjMKypxFsMi+ynujs5R/+hw5oJYxK6BUfMKdB0rhVs+QoTxG4YGmbyESd1f3D2J5DdiVu2s7S0MEeK10gJxR7dsnXPuxuV5/daL4MIdXgSb5FL8397EqBLWjUI1QDu0Rg7Yb2TTNSKJGA0OcZHOcdh+16Fthcj6r4tK8qd0HdfN/EYCyedJS9JD9siq+RKFEhLCFIN40Fq5Cvi8FOhGS9toqgqRRkBMWikx1k8BWea65JWV+nBijG76bcpdG/ws8p6jlHPCuSm/giL2FjDw9NeOrFQnsmCpuvkn5L05p9sZuldH5AK21C6VCmQIu/iTyDu+kdsklSiAE28fDHRFk9DPdnk27/HFad+eGfPbY8xKoZRUMuReIfj6dGpcpU7iI8y+zr7NPT+KWr0UOWzDOl/TGWhYn4puza72pSAJMqFiOx5yR+GoeuVxWBY27VE95/fQCfH7kO23XLnHTEhEqi7qEk68xgZ6L3oWgByaqZYdFSiMWMD6fcPM6pxb1WkM4vCHQePx9YjJMZuPKRlQrs38dNH+p7CDrrVM5qbhbB8MVddBm3S+f/7pFW2UjvOPUG6Utz5GYrVtBLOT2jJ92Jwn6mR/sKqad/ep6pSL8DKRgNr9WEBJbBJoKOoHE3FEAqJyhJVITofIyy8CzBkneVVpQx+uXGe/0en31QAL+DQXUSuI= sidebar_class_name: "get api-method" info_path: docs/api/HTTP/runtime custom_edit_url: null @@ -24,7 +24,7 @@ import Translate from "@docusaurus/Translate"; @@ -38,7 +38,7 @@ import Translate from "@docusaurus/Translate"; -This endpoint returns a 200 OK response if the namespace exists, otherwise it returns a 404 Not Found response. +Returns the namespace if it exists. Spice does not store namespace properties, so `properties` is `null`. diff --git a/website/docs/api/HTTP/get-table.StatusCodes.json b/website/docs/api/HTTP/get-table.StatusCodes.json index 1c218dab6..2358fef4e 100644 --- a/website/docs/api/HTTP/get-table.StatusCodes.json +++ b/website/docs/api/HTTP/get-table.StatusCodes.json @@ -1 +1 @@ -{"responses":{"200":{"description":"Table exists","content":{"application/json":{"schema":{"type":"object","required":["metadata"],"properties":{"metadata":{"type":"object","required":["format-version","table-uuid","location","schemas","last-updated-ms","last-column-id","last-sequence-number","current-schema-id","partition-specs","default-spec-id","last-partition-id","sort-orders","default-sort-order-id"],"properties":{"current-schema-id":{"type":"integer","format":"int32","minimum":0},"default-sort-order-id":{"type":"integer","format":"int32","minimum":0},"default-spec-id":{"type":"integer","format":"int32","minimum":0},"format-version":{"type":"string","enum":["V2"],"title":"TableFormatVersion"},"last-column-id":{"type":"integer","format":"int32","minimum":0},"last-partition-id":{"type":"integer","format":"int32","minimum":0},"last-sequence-number":{"type":"integer","format":"int64","minimum":0},"last-updated-ms":{"type":"integer","format":"int64"},"location":{"type":"string"},"partition-specs":{"type":"object"},"schemas":{"type":"object","description":"Iceberg schemas, see ``."},"sort-orders":{"type":"object"},"table-uuid":{"type":"string","example":"2b9da507-2c07-4bb3-9f0b-8df66a5e9e53"}},"title":"TableMetadata"}},"title":"LoadTableResponse"}}}},"404":{"description":"Table does not exist"},"500":{"description":"An internal server error occurred while getting the table","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message","type","code"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"message":{"type":"string"},"type":{"type":"string","enum":["NoSuchNamespaceException","BadRequestException","InternalServerError"],"title":"IcebergErrorType"}},"title":"IcebergError"}},"title":"IcebergResponseError"},"example":{"error":{"message":"Request failed. An internal server error occurred while getting the table.","r#type":"InternalServerError","code":500}}}}}}} \ No newline at end of file +{"responses":{"200":{"description":"The Iceberg table Spice reads the table from","content":{"application/json":{"schema":{"type":"object","description":"The Iceberg REST `LoadTableResult`: the table's metadata and where it is\nstored. No `config` or `storage-credentials`: a client reads the table's\nfiles with its own credentials.","required":["metadata"],"properties":{"metadata":{"type":"object","description":"Iceberg table metadata, see ``."},"metadata-location":{"type":["string","null"]}},"title":"LoadTableResponse"}}}},"400":{"description":"The table cannot be read as an Iceberg table","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message","type","code"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"message":{"type":"string"},"type":{"type":"string","enum":["NoSuchNamespaceException","NoSuchTableException","BadRequestException","ServiceUnavailableException","InternalServerError"],"title":"IcebergErrorType"}},"title":"IcebergError"}},"title":"IcebergResponseError"},"example":{"error":{"message":"Failed to load table 'spice.public.orders' as an Iceberg table: it is accelerated, so Spice answers queries from its acceleration rather than from an Iceberg table that Iceberg clients can read directly. Query it with SQL through Spice instead, over HTTP (`/v1/sql`) or Arrow Flight SQL. See: https://spiceai.org/docs/api/HTTP/get-table","type":"BadRequestException","code":400}}}}},"404":{"description":"Table does not exist","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message","type","code"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"message":{"type":"string"},"type":{"type":"string","enum":["NoSuchNamespaceException","NoSuchTableException","BadRequestException","ServiceUnavailableException","InternalServerError"],"title":"IcebergErrorType"}},"title":"IcebergError"}},"title":"IcebergResponseError"},"example":{"error":{"message":"Table 'spice.public.orders' does not exist","type":"NoSuchTableException","code":404}}}}},"503":{"description":"The table's Iceberg catalog could not be reached","content":{"application/json":{"schema":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["message","type","code"],"properties":{"code":{"type":"integer","format":"int32","minimum":0},"message":{"type":"string"},"type":{"type":"string","enum":["NoSuchNamespaceException","NoSuchTableException","BadRequestException","ServiceUnavailableException","InternalServerError"],"title":"IcebergErrorType"}},"title":"IcebergError"}},"title":"IcebergResponseError"}}}}}} \ No newline at end of file diff --git a/website/docs/api/HTTP/get-table.api.mdx b/website/docs/api/HTTP/get-table.api.mdx index fc2ad92cc..526921dd4 100644 --- a/website/docs/api/HTTP/get-table.api.mdx +++ b/website/docs/api/HTTP/get-table.api.mdx @@ -1,11 +1,11 @@ --- id: get-table -title: "Get a table." -description: "This endpoint returns the table if it exists, otherwise it returns a 404 Not Found response." -sidebar_label: "Get a table." +title: "Load a table." +description: "A table Spice reads unchanged from an Iceberg table (a federated `iceberg:`" +sidebar_label: "Load a table." hide_title: true hide_table_of_contents: true -api: eJy1Vm1v20YM/isH9ssGSJbqvLQRhgHZkBYBunxIs34JjOaso63rpDvljsoLDP33gSfZViKnWZruk2WSR/LIh89xBSSXHrJLOM1xjm4JswgU+tzpmrQ1kMFFob1Ao2qrDQmH1DjjBRUoSM5LFHohNAm80558JCwV6G61RxaujaXYT/fFmSXxwTZGCYe+tsbjBCKwNTrJoU4VZLBE+hrcQgS1dLJCQsf5rcDICiELP76WOVtozq+WVMA4aRQbS2EX23w5psPrRjtUkJFrMAKfF1hJyFZA9zUH8eS0WULbRpu466yej/mKcDM27mrjWT9NU/55FCeUvSs4RJBbQ2iI7WRdlzoP1Uy+eTZejYPZ+TfM6UFal1AhSSVJcvtrxz0h3aWw0TzjYWFdJSm+Qec5zagrWNw0WkEEpe3SgvXtOfNSeoqbWklCFVcbSW7LpjJxd44FHq8bNDnGpqnm6PjOjXNoKO58daa1dKQ5RuxrzH1oz0I2JYX/A3dbwyDz1lFsnWKcDc5spGw1qso4gW15tCFchjS7mnSivSlEUGmjq6aCLG2fCvUKP/01X+7hUe9GwIwADdtewpcp14I0lbhG4odw+Et/th018eXpjLv0gz4eA+c5N4f7O90MIPofPLQDtI9HfIzT0Vy12xnZMXMPuaBnbdEfiIRHFFe/FUS1z5JE1jIvcLLUVDTzibaJ7uwTDp286U/9fjUJQQeDsCupwUDvQsidrOqAiun8SMmD9F08zdN38f58vhcfLdJ5/F4tDg/lAR7hwR5T60MY/bXmmaHmk5UqaM97VoS2Zf1+uv8ULyqLXhjbv0ic98EuEj02gjvojCyFR3eDTqBz1gmbh9lW4rbQJYolEmmz3BL6z2LcEG1MLJ34Wbb2Xi45lWDFGSncQVIsffnorL3vAm8neJofzuznJi/O1i/vyV2Odc/7f0h1zvPoaSg97ZvwOfTgZF2UNQB6fAf5BcccomOo3KVYg6Y3GGB0UOfNbaHPTiykLlFNxA9DJLz5b/oS7bpg37DsIE3btkN0hVTYfgMKjxkVkEFy8zbZrDE+WW2+2yRE8skq/Lb8joUA3a7UuBIyYBbIkoTZqCysp+x9epSOKOQTq4XCGyxtXaGh/rIT8ac1C71sHIpbTYW4imP2yGQx43B54zTdh3iy1l//Qf6esU6bhQ0o6fvhGkO6wp0bk691jkpsTUqdI096tlm9jgOLxdMJJ68VGtILzXQ+1LQRbN4vmE7SSRo3xncjy6xrPVXSDLx+RBJy27AHma22M/5/7789TAjvKKlLqcMTGvq36lFwCTdvIdouvrymZMM1uIMCS7vrziLgdvPJ1WouPf7tyrZl8XWDLnQpghvpdLDm/int+VtBtpClx+9U45fznod+Fd/fsXfeqxdKcw+cQdnwP4ggYGew2vPe/aqcfkY6PXZmbQQFSsWAu1z1uuOcKWxwavQQ8BxshvrjyQW07b8qu5kd +api: eJztWFtv2zYU/isE95AU8K1tBmzCMCBb065AUKyJ+5QEFSPRFluJVEkqFxj+7/sOKcly7CYP3dOWJ8vkuZ/vXKQV92LpeHLB32fyWtolvxrxXLrMqtoro3nCj5kX16Vk57XKJLNS5I41OiuEXsqcLaypmNCsZW9pDwVbyFxa4UGSqniXpJfaWJYuy0YmKcuFF076ERMtk9JDQaB8B0KWgaw0yxEdDK7fvDm91IHvBVMOZvnGaigTjvlC+G17Eqa8Y1ljrdSeVdILUg5xef/nUpcGquDyiJVG5J1rgTGawIxm8kbae2j71kgH050Z2pSVCvIvdYyRLyRzWtSuMD4G78AxLe88A3MQAqoJO2aZKZsKvuek1JvAGMxGuBrvVD6IfVbIKDnqYvDU6EyO2G2h+hx9lbJuqYLo8NxGixUiB7HU8IzdCorcUjkvLXQ32quSzkNAYxRgoL5nBgJsZ9ShyDJZxuRCsfJFryfqz0xVNx6GuiYrKCOyupZ5rvTSUbZvlLyN6bzUzjQWHCFl0KpNn7k2rYvGwbKgJD2azdIR06KCpOAeAuKMTmJALzV5RITnH09xbU2zLFqLlIaLIp/wETc1WY48v88B7qX0n4NbuKmFFYCDtFQPKw49EhT042qREYWieqiFL/jDIpnDmp6SmcUmiaST8KIQYZ5428gRd0hjJXiy4v6+JiXOW/jE1+tRr7ez6mmdP6DuiohdbbSTju5fzWb0s6tnu7yHraDXHOoF2jOjPaBJckRdlypW1fSLI2GrXWPM9ReZ+b3edVrPTs7nLD0FIOek6Uy6pvRpstGNytqqagDcyohkYMwbS0D+YFgK4xZqmRL6UjoXSznOcAuDlSgdZIqutB64dwBJC9SYixijvmBuNRswb4f+gncWUUutLeHOqxjm/ubJKGzHveND45GSpb8V3tcumU7bBjsRNTWIibHLqatlNv0psI07tt/TCV+Peu3jruNtzLjooDHiuilLfgVEcq98SSYO4x8gAwDR/dH3QBONzoSmsr6OgKF28HBc/AhohgGX1hq7G+14/AQvStcBDDgNVGRRLndlhdONKAWrl9KCfGFsJXw8ev0KB2hSqmoqnsxCyKP03RJs9e1cjLjUxH3BP5hztNEPXXM5uctkDPKovQo5GR7/IfKzOKGGp+fS3gAon7S4Eap8yPMenlgtSqKS9qSLZJf7Nl/hfE6GDoExvNx30eGlJYBrd6KqS7mVnD5E/C3Mi5OQRlCLogNHPWdSN9cABxCO5cId7ANT0g6wrSGFOR17ltDuFpxhYiClmxnfkyMcDD9h3mHH+c6Cs7VjxIZBe4KOGM+BqsyX9xP2MYz6JwcTxiGizv6az/9mh+n05uXUfSvTF9SmjhGgW/a2VMvCk4AJO5dwsiv9EBahQs3nJnNTUaspyZlitI278mqxtR8YEdOo4nVXz0d76jm4nRsZh7S8w9LwXLfPdTuo2/kjhboDnDZq34lEB8mjFpI/z14/MmIw/ftSbFf1zDRlzjZzBzjMn+H6v4JrRA6WncK0m37Y8bFIJ5w6bL+uu+mqf15PA6JwFH7XYHHB1PhO0NgS3NR70XppfSoL43zyy+zX2c7qdkrXLMcbY2nqijbKKGnC/gxLaIMNNb7XjMckkZazK1KH91Tl74M+NPPPXyU9X9Gd0gsTctg6bumNrZJ7d+dQhjnbkADtkpa2pH/FOA7r4vjVhIxXYY1dKMBs6wYxJPejYBxMZuMGQysMFtzV8L8SeiCV1sTunX7y0LTVpgSfPyw8f1j4L31YaBurRyKmdSnw3o7yCA1j1badC37zkt6s+saDP8nw+0LsPXQa6wslT/2FOFera4D6ky3XazoOhlFbQHUKqwI1NYxcOXpGw1vgjVQ+Un2HZ+1YesEe/3ix16/2UOh7ThagnvAPj6FZDb6Z0AeNH7Lp3zCnbVZXICyQLOpwCFW8O85oOA24dvYCarz9FHl3Msdk+QdZBWj5 sidebar_class_name: "get api-method" info_path: docs/api/HTTP/runtime custom_edit_url: null @@ -24,7 +24,7 @@ import Translate from "@docusaurus/Translate"; @@ -38,7 +38,16 @@ import Translate from "@docusaurus/Translate"; -This endpoint returns the table if it exists, otherwise it returns a 404 Not Found response. +A table Spice reads unchanged from an Iceberg table (a federated `iceberg:` +or `glue:` dataset, a table in an Iceberg or Glue catalog, or an Iceberg DDL +table) is returned as that Iceberg table: its current metadata and metadata +location, loaded from its catalog on every request, so an Iceberg client +reads the snapshot Spice's next query reads. A column added to the table +outside Spice reaches the client at once, while Spice keeps the columns the +table had when it was registered until it is reloaded. Any other table +(accelerated, with columns Spice computes such as embeddings, a view, or a +source that is not Iceberg) is refused with `400`, naming the reason: query +it with SQL through Spice instead. + + + + + + + + +Answers typed questions about `input`, compatible with `OpenAI`'s Decisions API: a +`predicate` returns the probability a statement is true, a `choice` returns the +most probable of its `choices` with the distribution and a confidence, and a +`score` returns the probability-weighted 0-based index of its `levels`. Answers come +back in question order with each question's `name`. `model` names any model in the +Spicepod: a decision model such as `TypeSafe` Jev, whose probabilities are +calibrated, or a chat model, whose probabilities are its own estimates. + + + Request + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/website/docs/api/HTTP/post-nsql.RequestSchema.json b/website/docs/api/HTTP/post-nsql.RequestSchema.json index 7ce2dfc45..b4f869e58 100644 --- a/website/docs/api/HTTP/post-nsql.RequestSchema.json +++ b/website/docs/api/HTTP/post-nsql.RequestSchema.json @@ -1 +1 @@ -{"title":"Body","body":{"description":"Request body to generate an NSQL query","content":{"application/json":{"schema":{"type":"object","required":["query"],"properties":{"datasets":{"type":["array","null"],"items":{"type":"string"},"description":"Names of datasets to sample from when constructing model context; this is a sampling hint and does not restrict which tables queries can target. If omitted, all datasets are used."},"model":{"type":"string","description":"The name of the model to use for SQL generation. Default: \"nql\""},"query":{"type":"string","description":"The natural language query to be converted into SQL"},"sample_data_enabled":{"type":"boolean","description":"Whether sample data is included in the context for SQL generation. Default: true"},"stream":{"type":"boolean","description":"If true, streams the response instead of waiting for completion"}},"title":"Request"},"example":{"query":"Get the top 5 customers by total sales","model":"nql","stream":false,"sample_data_enabled":true,"datasets":["sales_data"]}}},"required":true}} \ No newline at end of file +{"title":"Body","body":{"description":"Request body to generate an NSQL query","content":{"application/json":{"schema":{"type":"object","required":["query"],"properties":{"datasets":{"type":["array","null"],"items":{"type":"string"},"description":"Names of datasets to sample from when constructing model context; this is a sampling hint and does not restrict which tables queries can target. If omitted, all datasets are used."},"model":{"type":"string","description":"The name of the model to use for SQL generation. Default: \"nql\""},"query":{"type":"string","description":"The natural language query to be converted into SQL"},"sample_data_enabled":{"type":"boolean","description":"Whether sample data is included in the context for SQL generation. Default: true"},"stream":{"type":"boolean","description":"If true, streams the response instead of waiting for completion"},"reasoning_effort":{"oneOf":[{"type":"null"},{"description":"How much the model reasons before it writes SQL. Omitted keeps the model setting.","type":"string","enum":["none","minimal","low","medium","high","xhigh"],"title":"ReasoningEffort"}]}},"title":"Request"},"example":{"query":"Get the top 5 customers by total sales","model":"nql","stream":false,"sample_data_enabled":true,"datasets":["sales_data"]}}},"required":true}} \ No newline at end of file diff --git a/website/docs/api/HTTP/post-nsql.api.mdx b/website/docs/api/HTTP/post-nsql.api.mdx index 3ae71e740..c839bc41b 100644 --- a/website/docs/api/HTTP/post-nsql.api.mdx +++ b/website/docs/api/HTTP/post-nsql.api.mdx @@ -5,7 +5,7 @@ description: "Generate and optionally execute a natural-language text-to-SQL (NS sidebar_label: "Text-to-SQL (NSQL)" hide_title: true hide_table_of_contents: true -api: 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 +api: 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 sidebar_class_name: "post api-method" info_path: docs/api/HTTP/runtime custom_edit_url: null diff --git a/website/docs/api/HTTP/post-responses.RequestSchema.json b/website/docs/api/HTTP/post-responses.RequestSchema.json index a055df31d..88ac29e40 100644 --- a/website/docs/api/HTTP/post-responses.RequestSchema.json +++ b/website/docs/api/HTTP/post-responses.RequestSchema.json @@ -1 +1 @@ -{"title":"Body","body":{"description":"Create a response using the OpenAI Responses API format. This endpoint provides a more flexible conversation interface compared to Chat Completions.","content":{"application/json":{"schema":{"type":"object","description":"Builder for a Responses API request.","required":["input"],"properties":{"background":{"type":["boolean","null"],"description":"Whether to run the model response in the background.\n[Learn more](https://platform.openai.com/docs/guides/background)."},"conversation":{"oneOf":[{"type":"null"},{"description":"The conversation that this response belongs to. Items from this conversation are prepended to\n `input_items` for this response request.\n\nInput items and output items from this response are automatically added to this conversation after\nthis response completes.","oneOf":[{"type":"string","description":"The unique ID of the conversation."},{"description":"The conversation that this response belongs to.","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The unique ID of the conversation."}},"title":"Conversation"}],"title":"ConversationParam"}]},"include":{"type":["array","null"],"items":{"type":"string","enum":["file_search_call.results","web_search_call.results","web_search_call.action.sources","message.input_image.image_url","computer_call_output.output.image_url","code_interpreter_call.outputs","reasoning.encrypted_content","message.output_text.logprobs"],"title":"IncludeEnum"},"description":"Specify additional output data to include in the model response. Currently supported\nvalues are:\n\n- `web_search_call.action.sources`: Include the sources of the web search tool call.\n\n- `code_interpreter_call.outputs`: Includes the outputs of python code execution in code\n interpreter tool call items.\n\n- `computer_call_output.output.image_url`: Include image urls from the computer call\n output.\n\n- `file_search_call.results`: Include the search results of the file search tool call.\n\n- `message.input_image.image_url`: Include image urls from the input message.\n\n- `message.output_text.logprobs`: Include logprobs with assistant messages.\n\n- `reasoning.encrypted_content`: Includes an encrypted version of reasoning tokens in\n reasoning item outputs. This enables reasoning items to be used in multi-turn\n conversations when using the Responses API statelessly (like when the `store` parameter is\n set to `false`, or when an organization is enrolled in the zero data retention program)."},"input":{"description":"Text, image, or file inputs to the model, used to generate a response.\n\nLearn more:\n- [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n- [Image inputs](https://platform.openai.com/docs/guides/images)\n- [File inputs](https://platform.openai.com/docs/guides/pdf-files)\n- [Conversation state](https://platform.openai.com/docs/guides/conversation-state)\n- [Function calling](https://platform.openai.com/docs/guides/function-calling)","oneOf":[{"type":"string","description":" A text input to the model, equivalent to a text input with the\n`user` role."},{"type":"array","items":{"oneOf":[{"description":"A reference to an existing item by ID.\nHas a required `id` field and optional `type` (can be \"item_reference\" or null).\nMust be tried first as it's the most minimal structure.","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The ID of the item to reference."},"type":{"oneOf":[{"type":"null"},{"description":"The type of item to reference. Can be \"item_reference\" or null.","type":"string","enum":["item_reference"],"title":"ItemReferenceType"}]}},"title":"ItemReference"},{"description":"All structured items with proper type discrimination.\nIncludes InputMessage, OutputMessage, and all tool calls/outputs.\nUses the discriminated `Item` enum for efficient, type-safe deserialization.","oneOf":[{"allOf":[{"description":"A message (type: \"message\").\nCan represent InputMessage (user/system/developer) or OutputMessage (assistant).\n\nInputMessage:\n A message input to the model with a role indicating instruction following hierarchy.\n Instructions given with the developer or system role take precedence over instructions given with the user role.\nOutputMessage:\n A message output from the model.","oneOf":[{"description":"An output message from the model (role: assistant, has required id & status).\nThis must come first as it has the most specific structure (required id and status fields).","type":"object","required":["content","id","role","status"],"properties":{"content":{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A text output from the model.","type":"object","required":["annotations","text"],"properties":{"annotations":{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A citation to a file.","type":"object","required":["file_id","filename","index"],"properties":{"file_id":{"type":"string","description":"The ID of the file."},"filename":{"type":"string","description":"The filename of the file cited."},"index":{"type":"integer","format":"int32","description":"The index of the file in the list of files.","minimum":0}},"title":"FileCitationBody"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_citation"]}}}],"description":"A citation to a file."},{"allOf":[{"description":"A citation for a web resource used to generate a model response.","type":"object","required":["end_index","start_index","title","url"],"properties":{"end_index":{"type":"integer","format":"int32","description":"The index of the last character of the URL citation in the message.","minimum":0},"start_index":{"type":"integer","format":"int32","description":"The index of the first character of the URL citation in the message.","minimum":0},"title":{"type":"string","description":"The title of the web resource."},"url":{"type":"string","description":"The URL of the web resource."}},"title":"UrlCitationBody"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["url_citation"]}}}],"description":"A citation for a web resource used to generate a model response."},{"allOf":[{"description":"A citation for a container file used to generate a model response.","type":"object","required":["container_id","end_index","file_id","filename","start_index"],"properties":{"container_id":{"type":"string","description":"The ID of the container file."},"end_index":{"type":"integer","format":"int32","description":"The index of the last character of the container file citation in the message.","minimum":0},"file_id":{"type":"string","description":"The ID of the file."},"filename":{"type":"string","description":"The filename of the container file cited."},"start_index":{"type":"integer","format":"int32","description":"The index of the first character of the container file citation in the message.","minimum":0}},"title":"ContainerFileCitationBody"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["container_file_citation"]}}}],"description":"A citation for a container file used to generate a model response."},{"allOf":[{"description":"A path to a file.","type":"object","required":["file_id","index"],"properties":{"file_id":{"type":"string","description":"The ID of the file."},"index":{"type":"integer","format":"int32","description":"The index of the file in the list of files.","minimum":0}},"title":"FilePath"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_path"]}}}],"description":"A path to a file."}],"title":"Annotation"},"description":"The annotations of the text output."},"logprobs":{"type":["array","null"],"items":{"type":"object","required":["bytes","logprob","token","top_logprobs"],"properties":{"bytes":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"logprob":{"type":"number","format":"double"},"token":{"type":"string"},"top_logprobs":{"type":"array","items":{"type":"object","required":["bytes","logprob","token"],"properties":{"bytes":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"logprob":{"type":"number","format":"double"},"token":{"type":"string"}},"title":"TopLogProb"}}},"title":"LogProb"}},"text":{"type":"string","description":"The text output from the model."}},"title":"OutputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["output_text"]}}}],"description":"A text output from the model."},{"allOf":[{"description":"A refusal from the model.","type":"object","required":["refusal"],"properties":{"refusal":{"type":"string","description":"The refusal explanation from the model."}},"title":"RefusalContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["refusal"]}}}],"description":"A refusal from the model."}],"title":"OutputMessageContent"},"description":"The content of the output message."},"id":{"type":"string","description":"The unique ID of the output message."},"role":{"description":"The role of the output message. Always `assistant`.","type":"string","enum":["assistant"],"title":"AssistantRole"},"status":{"description":"The status of the message input. One of `in_progress`, `completed`, or\n`incomplete`. Populated when input items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}},"title":"OutputMessage"},{"description":"A structured input message (role: user/system/developer, content is `Vec`).\nHas structured content list and optional id/status fields.\n\nA message input to the model with a role indicating instruction following hierarchy.\nInstructions given with the `developer` or `system` role take precedence over instructions\ngiven with the `user` role.","type":"object","required":["content","role"],"properties":{"content":{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A text input to the model.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text input to the model."}},"title":"InputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_text"]}}}],"description":"A text input to the model."},{"allOf":[{"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision).","type":"object","required":["detail"],"properties":{"detail":{"description":"The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`.\nDefaults to `auto`.","type":"string","enum":["auto","low","high"],"title":"ImageDetail"},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"image_url":{"type":["string","null"],"description":"The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image\nin a data URL."}},"title":"InputImageContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_image"]}}}],"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision)."},{"allOf":[{"description":"A file input to the model.","type":"object","properties":{"file_data":{"type":["string","null"],"description":"The content of the file to be sent to the model."},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"file_url":{"type":["string","null"],"description":"The URL of the file to be sent to the model."},"filename":{"type":["string","null"],"description":"The name of the file to be sent to the model."}},"title":"InputFileContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_file"]}}}],"description":"A file input to the model."}],"description":"Parts of a message: text, image, file, or audio.","title":"InputContent"},"description":"A list of one or many input items to the model, containing different content types."},"role":{"description":"The role of the message input. One of `user`, `system`, or `developer`.\nNote: `assistant` is NOT allowed here; use OutputMessage instead.","type":"string","enum":["user","system","developer"],"title":"InputRole"},"status":{"oneOf":[{"type":"null"},{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]}},"title":"InputMessage"}],"title":"MessageItem"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["message"]}}}],"description":"A message (type: \"message\").\nCan represent InputMessage (user/system/developer) or OutputMessage (assistant).\n\nInputMessage:\n A message input to the model with a role indicating instruction following hierarchy.\n Instructions given with the developer or system role take precedence over instructions given with the user role.\nOutputMessage:\n A message output from the model."},{"allOf":[{"description":"The results of a file search tool call. See the\n[file search guide](https://platform.openai.com/docs/guides/tools-file-search) for more information.","type":"object","required":["id","queries","status"],"properties":{"id":{"type":"string","description":"The unique ID of the file search tool call."},"queries":{"type":"array","items":{"type":"string"},"description":"The queries used to search for files."},"results":{"type":["array","null"],"items":{"type":"object","description":"A single result from a file search.","required":["attributes","file_id","filename","score","text"],"properties":{"attributes":{"type":"object","description":"Set of 16 key-value pairs that can be attached to an object. This can be useful for storing\nadditional information about the object in a structured format, and querying for objects\nAPI or the dashboard. Keys are strings with a maximum length of 64 characters\n. Values are strings with a maximum length of 512 characters, booleans, or numbers.","additionalProperties":{},"propertyNames":{"type":"string"}},"file_id":{"type":"string","description":"The unique ID of the file."},"filename":{"type":"string","description":"The name of the file."},"score":{"type":"number","format":"float","description":"The relevance score of the file - a value between 0 and 1."},"text":{"type":"string","description":"The text that was retrieved from the file."}},"title":"FileSearchToolCallResult"},"description":"The results of the file search tool call."},"status":{"description":"The status of the file search tool call. One of `in_progress`, `searching`,\n`incomplete`,`failed`, or `completed`.","type":"string","enum":["in_progress","searching","incomplete","failed","completed"],"title":"FileSearchToolCallStatus"}},"title":"FileSearchToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_search_call"]}}}],"description":"The results of a file search tool call. See the\n[file search guide](https://platform.openai.com/docs/guides/tools-file-search) for more information."},{"allOf":[{"description":"A tool call to a computer use tool. See the\n[computer use guide](https://platform.openai.com/docs/guides/tools-computer-use) for more information.","type":"object","required":["action","call_id","id","pending_safety_checks","status"],"properties":{"action":{"oneOf":[{"allOf":[{"description":"A click action.","type":"object","required":["button","x","y"],"properties":{"button":{"description":"Indicates which mouse button was pressed during the click. One of `left`,\n`right`, `wheel`, `back`, or `forward`.","type":"string","enum":["left","right","wheel","back","forward"],"title":"ClickButtonType"},"x":{"type":"integer","format":"int32","description":"The x-coordinate where the click occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the click occurred."}},"title":"ClickParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["click"]}}}],"description":"A click action."},{"allOf":[{"description":"A double click action.","type":"object","required":["x","y"],"properties":{"x":{"type":"integer","format":"int32","description":"The x-coordinate where the double click occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the double click occurred."}},"title":"DoubleClickAction"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["double_click"]}}}],"description":"A double click action."},{"allOf":[{"description":"A drag action.","type":"object","required":["path"],"properties":{"path":{"type":"array","items":{"type":"object","description":"A point in 2D space.","required":["x","y"],"properties":{"x":{"type":"integer","format":"int32","description":"The x-coordinate."},"y":{"type":"integer","format":"int32","description":"The y-coordinate."}},"title":"DragPoint"},"description":"The path of points the cursor drags through."}},"title":"Drag"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["drag"]}}}],"description":"A drag action."},{"allOf":[{"description":"A collection of keypresses the model would like to perform.","type":"object","required":["keys"],"properties":{"keys":{"type":"array","items":{"type":"string"},"description":"The combination of keys the model is requesting to be pressed.\nThis is an array of strings, each representing a key."}},"title":"KeyPressAction"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["keypress"]}}}],"description":"A collection of keypresses the model would like to perform."},{"allOf":[{"description":"A mouse move action.","type":"object","required":["x","y"],"properties":{"x":{"type":"integer","format":"int32","description":"The x-coordinate to move to."},"y":{"type":"integer","format":"int32","description":"The y-coordinate to move to."}},"title":"Move"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["move"]}}}],"description":"A mouse move action."},{"type":"object","description":"A screenshot action.","required":["type"],"properties":{"type":{"type":"string","enum":["screenshot"]}}},{"allOf":[{"description":"A scroll action.","type":"object","required":["scroll_x","scroll_y","x","y"],"properties":{"scroll_x":{"type":"integer","format":"int32","description":"The horizontal scroll distance."},"scroll_y":{"type":"integer","format":"int32","description":"The vertical scroll distance."},"x":{"type":"integer","format":"int32","description":"The x-coordinate where the scroll occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the scroll occurred."}},"title":"Scroll"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["scroll"]}}}],"description":"A scroll action."},{"allOf":[{"description":"An action to type in text.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text to type."}},"title":"Type"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["type"]}}}],"description":"An action to type in text."},{"type":"object","description":"A wait action.","required":["type"],"properties":{"type":{"type":"string","enum":["wait"]}}}],"description":"Represents all user‐triggered actions.","title":"ComputerAction"},"call_id":{"type":"string","description":"An identifier used when responding to the tool call with output."},"id":{"type":"string","description":"The unique ID of the computer call."},"pending_safety_checks":{"type":"array","items":{"type":"object","required":["id"],"properties":{"code":{"type":["string","null"],"description":"The type of the pending safety check."},"id":{"type":"string","description":"The ID of the pending safety check."},"message":{"type":["string","null"],"description":"Details about the pending safety check."}},"title":"ComputerCallSafetyCheckParam"},"description":"The pending safety checks for the computer call."},"status":{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}},"title":"ComputerToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer_call"]}}}],"description":"A tool call to a computer use tool. See the\n[computer use guide](https://platform.openai.com/docs/guides/tools-computer-use) for more information."},{"allOf":[{"description":"The output of a computer tool call.","type":"object","required":["call_id","output"],"properties":{"acknowledged_safety_checks":{"type":["array","null"],"items":{"type":"object","required":["id"],"properties":{"code":{"type":["string","null"],"description":"The type of the pending safety check."},"id":{"type":"string","description":"The ID of the pending safety check."},"message":{"type":["string","null"],"description":"Details about the pending safety check."}},"title":"ComputerCallSafetyCheckParam"},"description":"The safety checks reported by the API that have been acknowledged by the developer."},"call_id":{"type":"string","description":"The ID of the computer tool call that produced the output."},"id":{"type":["string","null"],"description":"The unique ID of the computer tool call output. Optional when creating."},"output":{"description":"A computer screenshot image used with the computer use tool.","type":"object","required":["type"],"properties":{"file_id":{"type":["string","null"],"description":"The identifier of an uploaded file that contains the screenshot."},"image_url":{"type":["string","null"],"description":"The URL of the screenshot image."},"type":{"description":"Specifies the event type. For a computer screenshot, this property is always\nset to `computer_screenshot`.","type":"string","enum":["computer_screenshot"],"title":"ComputerScreenshotImageType"}},"title":"ComputerScreenshotImage"},"status":{"oneOf":[{"type":"null"},{"description":"The status of the message input. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when input items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]}},"title":"ComputerCallOutputItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer_call_output"]}}}],"description":"The output of a computer tool call."},{"allOf":[{"description":"The results of a web search tool call. See the\n[web search guide](https://platform.openai.com/docs/guides/tools-web-search) for more information.","type":"object","required":["action","id","status"],"properties":{"action":{"description":"An object describing the specific action taken in this web search call. Includes\ndetails on how the model used the web (search, open_page, find).","oneOf":[{"allOf":[{"description":"Action type \"search\" - Performs a web search query.","type":"object","required":["query"],"properties":{"query":{"type":"string","description":"The search query."},"sources":{"type":["array","null"],"items":{"type":"object","required":["type","url"],"properties":{"type":{"type":"string","description":"The type of source. Always `url`."},"url":{"type":"string","description":"The URL of the source."}},"title":"WebSearchActionSearchSource"},"description":"The sources used in the search."}},"title":"WebSearchActionSearch"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["search"]}}}],"description":"Action type \"search\" - Performs a web search query."},{"allOf":[{"description":"Action type \"open_page\" - Opens a specific URL from search results.","type":"object","required":["url"],"properties":{"url":{"type":"string","description":"The URL opened by the model."}},"title":"WebSearchActionOpenPage"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["open_page"]}}}],"description":"Action type \"open_page\" - Opens a specific URL from search results."},{"allOf":[{"description":"Action type \"find\": Searches for a pattern within a loaded page.","type":"object","required":["url","pattern"],"properties":{"pattern":{"type":"string","description":"The pattern or text to search for within the page."},"url":{"type":"string","description":"The URL of the page searched for the pattern."}},"title":"WebSearchActionFind"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["find"]}}}],"description":"Action type \"find\": Searches for a pattern within a loaded page."}],"title":"WebSearchToolCallAction"},"id":{"type":"string","description":"The unique ID of the web search tool call."},"status":{"description":"The status of the web search tool call.","type":"string","enum":["in_progress","searching","completed","failed"],"title":"WebSearchToolCallStatus"}},"title":"WebSearchToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_call"]}}}],"description":"The results of a web search tool call. See the\n[web search guide](https://platform.openai.com/docs/guides/tools-web-search) for more information."},{"allOf":[{"description":"A tool call to run a function. See the\n\n[function calling guide](https://platform.openai.com/docs/guides/function-calling) for more information.","type":"object","required":["arguments","call_id","name"],"properties":{"arguments":{"type":"string","description":"A JSON string of the arguments to pass to the function."},"call_id":{"type":"string","description":"The unique ID of the function tool call generated by the model."},"id":{"type":["string","null"],"description":"The unique ID of the function tool call."},"name":{"type":"string","description":"The name of the function to run."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]}},"title":"FunctionToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function_call"]}}}],"description":"A tool call to run a function. See the\n\n[function calling guide](https://platform.openai.com/docs/guides/function-calling) for more information."},{"allOf":[{"description":"The output of a function tool call.","type":"object","required":["call_id","output"],"properties":{"call_id":{"type":"string","description":"The unique ID of the function tool call generated by the model."},"id":{"type":["string","null"],"description":"The unique ID of the function tool call output.\nPopulated when this item is returned via API."},"output":{"description":"Text, image, or file output of the function tool call.","oneOf":[{"type":"string","description":"A JSON string of the output of the function tool call."},{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A text input to the model.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text input to the model."}},"title":"InputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_text"]}}}],"description":"A text input to the model."},{"allOf":[{"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision).","type":"object","required":["detail"],"properties":{"detail":{"description":"The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`.\nDefaults to `auto`.","type":"string","enum":["auto","low","high"],"title":"ImageDetail"},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"image_url":{"type":["string","null"],"description":"The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image\nin a data URL."}},"title":"InputImageContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_image"]}}}],"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision)."},{"allOf":[{"description":"A file input to the model.","type":"object","properties":{"file_data":{"type":["string","null"],"description":"The content of the file to be sent to the model."},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"file_url":{"type":["string","null"],"description":"The URL of the file to be sent to the model."},"filename":{"type":["string","null"],"description":"The name of the file to be sent to the model."}},"title":"InputFileContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_file"]}}}],"description":"A file input to the model."}],"description":"Parts of a message: text, image, file, or audio.","title":"InputContent"}}],"title":"FunctionCallOutput"},"status":{"oneOf":[{"type":"null"},{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]}},"title":"FunctionCallOutputItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function_call_output"]}}}],"description":"The output of a function tool call."},{"allOf":[{"description":"A description of the chain of thought used by a reasoning model while generating\na response. Be sure to include these items in your `input` to the Responses API\nfor subsequent turns of a conversation if you are manually\n[managing context](https://platform.openai.com/docs/guides/conversation-state).","type":"object","required":["id","summary"],"properties":{"content":{"type":["array","null"],"items":{"type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The reasoning text from the model."}},"title":"ReasoningTextContent"},"description":"Reasoning text content."},"encrypted_content":{"type":["string","null"],"description":"The encrypted content of the reasoning item - populated when a response is generated with\n`reasoning.encrypted_content` in the `include` parameter."},"id":{"type":"string","description":"Unique identifier of the reasoning content."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]},"summary":{"type":"array","items":{"oneOf":[{"allOf":[{"type":"object","description":"A single summary text fragment from reasoning.","required":["text"],"properties":{"text":{"type":"string","description":"A summary of the reasoning output from the model so far."}},"title":"Summary"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["summary_text"]}}}]}],"title":"SummaryPart"},"description":"Reasoning summary content."}},"title":"ReasoningItem"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["reasoning"]}}}],"description":"A description of the chain of thought used by a reasoning model while generating\na response. Be sure to include these items in your `input` to the Responses API\nfor subsequent turns of a conversation if you are manually\n[managing context](https://platform.openai.com/docs/guides/conversation-state)."},{"allOf":[{"description":"A compaction item generated by the [`v1/responses/compact` API](https://platform.openai.com/docs/api-reference/responses/compact).","type":"object","required":["encrypted_content"],"properties":{"encrypted_content":{"type":"string","description":"The encrypted content."},"id":{"type":["string","null"],"description":"The ID of the compaction item."}},"title":"CompactionSummaryItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["compaction"]}}}],"description":"A compaction item generated by the [`v1/responses/compact` API](https://platform.openai.com/docs/api-reference/responses/compact)."},{"allOf":[{"description":"An image generation request made by the model.","type":"object","required":["id","status"],"properties":{"id":{"type":"string","description":"The unique ID of the image generation call."},"result":{"type":["string","null"],"description":"The generated image encoded in base64."},"status":{"description":"The status of the image generation call.","type":"string","enum":["in_progress","completed","generating","failed"],"title":"ImageGenToolCallStatus"}},"title":"ImageGenToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["image_generation_call"]}}}],"description":"An image generation request made by the model."},{"allOf":[{"description":"A tool call to run code.","type":"object","required":["container_id","id","status"],"properties":{"code":{"type":["string","null"],"description":"The code to run, or null if not available."},"container_id":{"type":"string","description":"ID of the container used to run the code."},"id":{"type":"string","description":"The unique ID of the code interpreter tool call."},"outputs":{"type":["array","null"],"items":{"oneOf":[{"allOf":[{"description":"Code interpreter output logs","type":"object","required":["logs"],"properties":{"logs":{"type":"string","description":"The logs output from the code interpreter."}},"title":"CodeInterpreterOutputLogs"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["logs"]}}}],"description":"Code interpreter output logs"},{"allOf":[{"description":"Code interpreter output image","type":"object","required":["url"],"properties":{"url":{"type":"string","description":"The URL of the image output from the code interpreter."}},"title":"CodeInterpreterOutputImage"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["image"]}}}],"description":"Code interpreter output image"}],"description":"Individual result from a code interpreter: either logs or files.","title":"CodeInterpreterToolCallOutput"},"description":"The outputs generated by the code interpreter, such as logs or images.\nCan be null if no outputs are available."},"status":{"description":"The status of the code interpreter tool call.\nValid values are `in_progress`, `completed`, `incomplete`, `interpreting`, and `failed`.","type":"string","enum":["in_progress","completed","incomplete","interpreting","failed"],"title":"CodeInterpreterToolCallStatus"}},"title":"CodeInterpreterToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["code_interpreter_call"]}}}],"description":"A tool call to run code."},{"allOf":[{"description":"A tool call to run a command on the local shell.","type":"object","required":["action","call_id","id","status"],"properties":{"action":{"description":"Execute a shell command on the server.","type":"object","required":["command","env"],"properties":{"command":{"type":"array","items":{"type":"string"},"description":"The command to run."},"env":{"type":"object","description":"Environment variables to set for the command.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"timeout_ms":{"type":["integer","null"],"format":"int64","description":"Optional timeout in milliseconds for the command.","minimum":0},"user":{"type":["string","null"],"description":"Optional user to run the command as."},"working_directory":{"type":["string","null"],"description":"Optional working directory to run the command in."}},"title":"LocalShellExecAction"},"call_id":{"type":"string","description":"The unique ID of the local shell tool call generated by the model."},"id":{"type":"string","description":"The unique ID of the local shell call."},"status":{"description":"The status of the local shell call.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}},"title":"LocalShellToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["local_shell_call"]}}}],"description":"A tool call to run a command on the local shell."},{"allOf":[{"description":"The output of a local shell tool call.","type":"object","required":["id","output"],"properties":{"id":{"type":"string","description":"The unique ID of the local shell tool call generated by the model."},"output":{"type":"string","description":"A JSON string of the output of the local shell tool call."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]}},"title":"LocalShellToolCallOutput"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["local_shell_call_output"]}}}],"description":"The output of a local shell tool call."},{"allOf":[{"description":"A tool representing a request to execute one or more shell commands.","type":"object","required":["call_id","action"],"properties":{"action":{"description":"The shell commands and limits that describe how to run the tool call.","type":"object","required":["commands"],"properties":{"commands":{"type":"array","items":{"type":"string"},"description":"Ordered shell commands for the execution environment to run."},"max_output_length":{"type":["integer","null"],"format":"int64","description":"Maximum number of UTF-8 characters to capture from combined stdout and stderr output.","minimum":0},"timeout_ms":{"type":["integer","null"],"format":"int64","description":"Maximum wall-clock time in milliseconds to allow the shell commands to run.","minimum":0}},"title":"FunctionShellActionParam"},"call_id":{"type":"string","description":"The unique ID of the shell tool call generated by the model."},"id":{"type":["string","null"],"description":"The unique ID of the shell tool call. Populated when this item is returned via API."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the shell call. One of `in_progress`, `completed`, or `incomplete`.","type":"string","enum":["in_progress","completed","incomplete"],"title":"FunctionShellCallItemStatus"}]}},"title":"FunctionShellCallItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["shell_call"]}}}],"description":"A tool representing a request to execute one or more shell commands."},{"allOf":[{"description":"The streamed output items emitted by a shell tool call.","type":"object","required":["call_id","output"],"properties":{"call_id":{"type":"string","description":"The unique ID of the shell tool call generated by the model."},"id":{"type":["string","null"],"description":"The unique ID of the shell tool call output. Populated when this item is returned via API."},"max_output_length":{"type":["integer","null"],"format":"int64","description":"The maximum number of UTF-8 characters captured for this shell call's combined output.","minimum":0},"output":{"type":"array","items":{"type":"object","description":"Captured stdout and stderr for a portion of a shell tool call output.","required":["stdout","stderr","outcome"],"properties":{"outcome":{"description":"The exit or timeout outcome associated with this chunk.","oneOf":[{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["timeout"]}}},{"allOf":[{"type":"object","description":"Indicates that the shell commands finished and returned an exit code.","required":["exit_code"],"properties":{"exit_code":{"type":"integer","format":"int32","description":"The exit code returned by the shell process."}},"title":"FunctionShellCallOutputExitOutcomeParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["exit"]}}}]}],"title":"FunctionShellCallOutputOutcomeParam"},"stderr":{"type":"string","description":"Captured stderr output for this chunk of the shell call."},"stdout":{"type":"string","description":"Captured stdout output for this chunk of the shell call."}},"title":"FunctionShellCallOutputContentParam"},"description":"Captured chunks of stdout and stderr output, along with their associated outcomes."}},"title":"FunctionShellCallOutputItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["shell_call_output"]}}}],"description":"The streamed output items emitted by a shell tool call."},{"allOf":[{"description":"A tool call representing a request to create, delete, or update files using diff patches.","type":"object","required":["call_id","status","operation"],"properties":{"call_id":{"type":"string","description":"The unique ID of the apply patch tool call generated by the model."},"id":{"type":["string","null"],"description":"The unique ID of the apply patch tool call. Populated when this item is returned via API."},"operation":{"description":"The specific create, delete, or update instruction for the apply_patch tool call.","oneOf":[{"allOf":[{"type":"object","description":"Instruction for creating a new file via the apply_patch tool.","required":["path","diff"],"properties":{"diff":{"type":"string","description":"Unified diff content to apply when creating the file."},"path":{"type":"string","description":"Path of the file to create relative to the workspace root."}},"title":"ApplyPatchCreateFileOperationParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["create_file"]}}}]},{"allOf":[{"type":"object","description":"Instruction for deleting an existing file via the apply_patch tool.","required":["path"],"properties":{"path":{"type":"string","description":"Path of the file to delete relative to the workspace root."}},"title":"ApplyPatchDeleteFileOperationParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["delete_file"]}}}]},{"allOf":[{"type":"object","description":"Instruction for updating an existing file via the apply_patch tool.","required":["path","diff"],"properties":{"diff":{"type":"string","description":"Unified diff content to apply to the existing file."},"path":{"type":"string","description":"Path of the file to update relative to the workspace root."}},"title":"ApplyPatchUpdateFileOperationParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["update_file"]}}}]}],"title":"ApplyPatchOperationParam"},"status":{"description":"The status of the apply patch tool call. One of `in_progress` or `completed`.","type":"string","enum":["in_progress","completed"],"title":"ApplyPatchCallStatusParam"}},"title":"ApplyPatchToolCallItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["apply_patch_call"]}}}],"description":"A tool call representing a request to create, delete, or update files using diff patches."},{"allOf":[{"description":"The streamed output emitted by an apply patch tool call.","type":"object","required":["call_id","status"],"properties":{"call_id":{"type":"string","description":"The unique ID of the apply patch tool call generated by the model."},"id":{"type":["string","null"],"description":"The unique ID of the apply patch tool call output. Populated when this item is returned via API."},"output":{"type":["string","null"],"description":"Optional human-readable log text from the apply patch tool (e.g., patch results or errors)."},"status":{"description":"The status of the apply patch tool call output. One of `completed` or `failed`.","type":"string","enum":["completed","failed"],"title":"ApplyPatchCallOutputStatusParam"}},"title":"ApplyPatchToolCallOutputItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["apply_patch_call_output"]}}}],"description":"The streamed output emitted by an apply patch tool call."},{"allOf":[{"description":"A list of tools available on an MCP server.","type":"object","required":["id","server_label","tools"],"properties":{"error":{"type":["string","null"],"description":"Error message if listing failed."},"id":{"type":"string","description":"The unique ID of the list."},"server_label":{"type":"string","description":"The label of the MCP server."},"tools":{"type":"array","items":{"type":"object","required":["input_schema","name"],"properties":{"annotations":{"description":"Additional annotations about the tool."},"description":{"type":["string","null"],"description":"The description of the tool."},"input_schema":{"description":"The JSON schema describing the tool's input."},"name":{"type":"string","description":"The name of the tool."}},"title":"MCPListToolsTool"},"description":"The tools available on the server."}},"title":"MCPListTools"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp_list_tools"]}}}],"description":"A list of tools available on an MCP server."},{"allOf":[{"description":"A request for human approval of a tool invocation.","type":"object","required":["arguments","id","name","server_label"],"properties":{"arguments":{"type":"string","description":"JSON string of arguments for the tool."},"id":{"type":"string","description":"The unique ID of the approval request."},"name":{"type":"string","description":"The name of the tool to run."},"server_label":{"type":"string","description":"The label of the MCP server making the request."}},"title":"MCPApprovalRequest"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp_approval_request"]}}}],"description":"A request for human approval of a tool invocation."},{"allOf":[{"description":"A response to an MCP approval request.","type":"object","required":["approval_request_id","approve"],"properties":{"approval_request_id":{"type":"string","description":"The ID of the approval request being answered."},"approve":{"type":"boolean","description":"Whether the request was approved."},"id":{"type":["string","null"],"description":"The unique ID of the approval response"},"reason":{"type":["string","null"],"description":"Optional reason for the decision."}},"title":"MCPApprovalResponse"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp_approval_response"]}}}],"description":"A response to an MCP approval request."},{"allOf":[{"description":"An invocation of a tool on an MCP server.","type":"object","required":["arguments","id","name","server_label"],"properties":{"approval_request_id":{"type":["string","null"],"description":"Unique identifier for the MCP tool call approval request. Include this value\nin a subsequent `mcp_approval_response` input to approve or reject the corresponding\ntool call."},"arguments":{"type":"string","description":"A JSON string of the arguments passed to the tool."},"error":{"type":["string","null"],"description":"Error message from the call, if any."},"id":{"type":"string","description":"The unique ID of the tool call."},"name":{"type":"string","description":"The name of the tool that was run."},"output":{"type":["string","null"],"description":"The output from the tool call."},"server_label":{"type":"string","description":"The label of the MCP server running the tool."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the tool call. One of `in_progress`, `completed`, `incomplete`,\n`calling`, or `failed`.","type":"string","enum":["in_progress","completed","incomplete","calling","failed"],"title":"MCPToolCallStatus"}]}},"title":"MCPToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp_call"]}}}],"description":"An invocation of a tool on an MCP server."},{"allOf":[{"description":"The output of a custom tool call from your code, being sent back to the model.","type":"object","required":["call_id","output"],"properties":{"call_id":{"type":"string","description":"The call ID, used to map this custom tool call output to a custom tool call."},"id":{"type":["string","null"],"description":"The unique ID of the custom tool call output in the OpenAI platform."},"output":{"description":"The output from the custom tool call generated by your code.\nCan be a string or an list of output content.","oneOf":[{"type":"string","description":"A string of the output of the custom tool call."},{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A text input to the model.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text input to the model."}},"title":"InputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_text"]}}}],"description":"A text input to the model."},{"allOf":[{"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision).","type":"object","required":["detail"],"properties":{"detail":{"description":"The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`.\nDefaults to `auto`.","type":"string","enum":["auto","low","high"],"title":"ImageDetail"},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"image_url":{"type":["string","null"],"description":"The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image\nin a data URL."}},"title":"InputImageContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_image"]}}}],"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision)."},{"allOf":[{"description":"A file input to the model.","type":"object","properties":{"file_data":{"type":["string","null"],"description":"The content of the file to be sent to the model."},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"file_url":{"type":["string","null"],"description":"The URL of the file to be sent to the model."},"filename":{"type":["string","null"],"description":"The name of the file to be sent to the model."}},"title":"InputFileContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_file"]}}}],"description":"A file input to the model."}],"description":"Parts of a message: text, image, file, or audio.","title":"InputContent"},"description":"Text, image, or file output of the custom tool call."}],"title":"CustomToolCallOutputOutput"}},"title":"CustomToolCallOutput"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom_tool_call_output"]}}}],"description":"The output of a custom tool call from your code, being sent back to the model."},{"allOf":[{"description":"A call to a custom tool created by the model.","type":"object","required":["call_id","input","name","id"],"properties":{"call_id":{"type":"string","description":"An identifier used to map this custom tool call to a tool call output."},"id":{"type":"string","description":"The unique ID of the custom tool call in the OpenAI platform."},"input":{"type":"string","description":"The input for the custom tool call generated by the model."},"name":{"type":"string","description":"The name of the custom tool being called."}},"title":"CustomToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom_tool_call"]}}}],"description":"A call to a custom tool created by the model."}],"title":"Item"},{"description":"A simple, user-friendly message input (EasyInputMessage).\nSupports string content and can include assistant role for previous responses.\nMust be tried last as it's the most flexible structure.\n\nA message input to the model with a role indicating instruction following\nhierarchy. Instructions given with the `developer` or `system` role take\nprecedence over instructions given with the `user` role. Messages with the\n`assistant` role are presumed to have been generated by the model in previous\ninteractions.","type":"object","required":["type","role","content"],"properties":{"content":{"description":"Text, image, or audio input to the model, used to generate a response.\nCan also contain previous assistant responses.","oneOf":[{"type":"string","description":"A text input to the model."},{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A text input to the model.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text input to the model."}},"title":"InputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_text"]}}}],"description":"A text input to the model."},{"allOf":[{"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision).","type":"object","required":["detail"],"properties":{"detail":{"description":"The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`.\nDefaults to `auto`.","type":"string","enum":["auto","low","high"],"title":"ImageDetail"},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"image_url":{"type":["string","null"],"description":"The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image\nin a data URL."}},"title":"InputImageContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_image"]}}}],"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision)."},{"allOf":[{"description":"A file input to the model.","type":"object","properties":{"file_data":{"type":["string","null"],"description":"The content of the file to be sent to the model."},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"file_url":{"type":["string","null"],"description":"The URL of the file to be sent to the model."},"filename":{"type":["string","null"],"description":"The name of the file to be sent to the model."}},"title":"InputFileContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_file"]}}}],"description":"A file input to the model."}],"description":"Parts of a message: text, image, file, or audio.","title":"InputContent"},"description":"A list of one or many input items to the model, containing different content types."}],"title":"EasyInputContent"},"role":{"description":"The role of the message input. One of `user`, `assistant`, `system`, or `developer`.","type":"string","enum":["user","assistant","system","developer"],"title":"Role"},"type":{"description":"The type of the message input. Always set to `message`.","type":"string","enum":["message"],"title":"MessageType"}},"title":"EasyInputMessage"}],"description":"Input item that can be used in the context for generating a response.\n\nThis represents the OpenAPI `InputItem` schema which is an `anyOf`:\n1. `EasyInputMessage` - Simple, user-friendly message input (can use string content)\n2. `Item` - Structured items with proper type discrimination (including InputMessage, OutputMessage, tool calls)\n3. `ItemReferenceParam` - Reference to an existing item by ID (type can be null)\n\nUses untagged deserialization because these types overlap in structure.\nOrder matters: more specific structures are tried first.\n\n# OpenAPI Specification\nCorresponds to the `InputItem` schema: `anyOf[EasyInputMessage, Item, ItemReferenceParam]`","title":"InputItem"},"description":"A list of one or many input items to the model, containing\ndifferent content types."}],"title":"InputParam"},"instructions":{"type":["string","null"],"description":"A system (or developer) message inserted into the model's context.\n\nWhen using along with `previous_response_id`, the instructions from a previous\nresponse will not be carried over to the next response. This makes it simple\nto swap out system (or developer) messages in new responses."},"max_output_tokens":{"type":["integer","null"],"format":"int32","description":"An upper bound for the number of tokens that can be generated for a response, including\nvisible output tokens and [reasoning tokens](https://platform.openai.com/docs/guides/reasoning).","minimum":0},"max_tool_calls":{"type":["integer","null"],"format":"int32","description":"The maximum number of total calls to built-in tools that can be processed in a response. This\nmaximum number applies across all built-in tool calls, not per individual tool. Any further\nattempts to call a tool by the model will be ignored.","minimum":0},"metadata":{"type":["object","null"],"description":"Set of 16 key-value pairs that can be attached to an object. This can be\nuseful for storing additional information about the object in a structured\nformat, and querying for objects via API or the dashboard.\n\nKeys are strings with a maximum length of 64 characters. Values are\nstrings with a maximum length of 512 characters.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"model":{"type":["string","null"],"description":"Model ID used to generate the response, like `gpt-4o` or `o3`. OpenAI\noffers a wide range of models with different capabilities, performance\ncharacteristics, and price points. Refer to the [model guide](https://platform.openai.com/docs/models)\nto browse and compare available models."},"parallel_tool_calls":{"type":["boolean","null"],"description":"Whether to allow the model to run tool calls in parallel."},"previous_response_id":{"type":["string","null"],"description":"The unique ID of the previous response to the model. Use this to create multi-turn conversations.\nLearn more about [conversation state](https://platform.openai.com/docs/guides/conversation-state).\nCannot be used in conjunction with `conversation`."},"prompt":{"oneOf":[{"type":"null"},{"description":"Reference to a prompt template and its variables.\n[Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts).","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The unique identifier of the prompt template to use."},"variables":{"oneOf":[{"type":"null"},{"description":"Optional map of values to substitute in for variables in your\nprompt. The substitution values can either be strings, or other\nResponse input types like images or files.","oneOf":[{"type":"string"},{"oneOf":[{"allOf":[{"description":"A text input to the model.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text input to the model."}},"title":"InputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_text"]}}}],"description":"A text input to the model."},{"allOf":[{"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision).","type":"object","required":["detail"],"properties":{"detail":{"description":"The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`.\nDefaults to `auto`.","type":"string","enum":["auto","low","high"],"title":"ImageDetail"},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"image_url":{"type":["string","null"],"description":"The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image\nin a data URL."}},"title":"InputImageContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_image"]}}}],"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision)."},{"allOf":[{"description":"A file input to the model.","type":"object","properties":{"file_data":{"type":["string","null"],"description":"The content of the file to be sent to the model."},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"file_url":{"type":["string","null"],"description":"The URL of the file to be sent to the model."},"filename":{"type":["string","null"],"description":"The name of the file to be sent to the model."}},"title":"InputFileContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_file"]}}}],"description":"A file input to the model."}],"description":"Parts of a message: text, image, file, or audio.","title":"InputContent"},{}],"title":"ResponsePromptVariables"}]},"version":{"type":["string","null"],"description":"Optional version of the prompt template."}},"title":"Prompt"}]},"prompt_cache_key":{"type":["string","null"],"description":"Used by OpenAI to cache responses for similar requests to optimize your cache hit rates. Replaces\nthe `user` field. [Learn more](https://platform.openai.com/docs/guides/prompt-caching)."},"prompt_cache_retention":{"oneOf":[{"type":"null"},{"description":"The retention policy for the prompt cache. Set to `24h` to enable extended prompt caching,\nwhich keeps cached prefixes active for longer, up to a maximum of 24 hours. [Learn\nmore](https://platform.openai.com/docs/guides/prompt-caching#prompt-cache-retention).","type":"string","enum":["in-memory","24h"],"title":"PromptCacheRetention"}]},"reasoning":{"oneOf":[{"type":"null"},{"description":"**gpt-5 and o-series models only**\nConfiguration options for [reasoning models](https://platform.openai.com/docs/guides/reasoning).","type":"object","properties":{"effort":{"oneOf":[{"type":"null"},{"description":"Constrains effort on reasoning for\n[reasoning models](https://platform.openai.com/docs/guides/reasoning).\nCurrently supported values are `minimal`, `low`, `medium`, and `high`. Reducing\nreasoning effort can result in faster responses and fewer tokens used\non reasoning in a response.\n\nNote: The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort.","type":"string","enum":["none","minimal","low","medium","high","xhigh"],"title":"ReasoningEffort"}]},"summary":{"oneOf":[{"type":"null"},{"description":"A summary of the reasoning performed by the model. This can be\nuseful for debugging and understanding the model's reasoning process.\nOne of `auto`, `concise`, or `detailed`.\n\n`concise` is supported for `computer-use-preview` models and all reasoning models after\n`gpt-5`.","type":"string","enum":["auto","concise","detailed"],"title":"ReasoningSummary"}]}},"title":"Reasoning"}]},"safety_identifier":{"type":["string","null"],"description":"A stable identifier used to help detect users of your application that may be violating OpenAI's\nusage policies.\n\nThe IDs should be a string that uniquely identifies each user. We recommend hashing their username\nor email address, in order to avoid sending us any identifying information. [Learn\nmore](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers)."},"service_tier":{"oneOf":[{"type":"null"},{"description":"Specifies the processing type used for serving the request.\n- If set to 'auto', then the request will be processed with the service tier configured in the Project settings. Unless otherwise configured, the Project will use 'default'.\n- If set to 'default', then the request will be processed with the standard pricing and performance for the selected model.\n- If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or '[priority](https://openai.com/api-priority-processing/)', then the request will be processed with the corresponding service tier.\n- When not set, the default behavior is 'auto'.\n\nWhen the `service_tier` parameter is set, the response body will include the `service_tier` value based on the processing mode actually used to serve the request. This response value may be different from the value set in the parameter.","type":"string","enum":["auto","default","flex","scale","priority"],"title":"ServiceTier"}]},"store":{"type":["boolean","null"],"description":"Whether to store the generated model response for later retrieval via API."},"stream":{"type":["boolean","null"],"description":"If set to true, the model response data will be streamed to the client\nas it is generated using [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format).\nSee the [Streaming section below](https://platform.openai.com/docs/api-reference/responses-streaming)\nfor more information."},"stream_options":{"oneOf":[{"type":"null"},{"description":"Options for streaming responses. Only set this when you set `stream: true`.","type":"object","properties":{"include_obfuscation":{"type":["boolean","null"],"description":"When true, stream obfuscation will be enabled. Stream obfuscation adds\nrandom characters to an `obfuscation` field on streaming delta events to\nnormalize payload sizes as a mitigation to certain side-channel attacks.\nThese obfuscation fields are included by default, but add a small amount\nof overhead to the data stream. You can set `include_obfuscation` to\nfalse to optimize for bandwidth if you trust the network links between\nyour application and the OpenAI API."}},"title":"ResponseStreamOptions"}]},"temperature":{"type":["number","null"],"format":"float","description":"What sampling temperature to use, between 0 and 2. Higher values like 0.8\nwill make the output more random, while lower values like 0.2 will make it\nmore focused and deterministic. We generally recommend altering this or\n`top_p` but not both."},"text":{"oneOf":[{"type":"null"},{"description":"Configuration options for a text response from the model. Can be plain\ntext or structured JSON data. Learn more:\n- [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n- [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)","type":"object","required":["format"],"properties":{"format":{"description":"An object specifying the format that the model must output.\n\nConfiguring `{ \"type\": \"json_schema\" }` enables Structured Outputs,\nwhich ensures the model will match your supplied JSON schema. Learn more in the\n[Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs).\n\nThe default format is `{ \"type\": \"text\" }` with no additional options.\n\n**Not recommended for gpt-4o and newer models:**\n\nSetting to `{ \"type\": \"json_object\" }` enables the older JSON mode, which\nensures the message the model generates is valid JSON. Using `json_schema`\nis preferred for models that support it.","oneOf":[{"type":"object","description":"Default response format. Used to generate text responses.","required":["type"],"properties":{"type":{"type":"string","enum":["text"]}}},{"type":"object","description":"JSON object response format. An older method of generating JSON responses.\nUsing `json_schema` is recommended for models that support it.\nNote that the model will not generate JSON without a system or user message\ninstructing it to do so.","required":["type"],"properties":{"type":{"type":"string","enum":["json_object"]}}},{"allOf":[{"description":"JSON Schema response format. Used to generate structured JSON responses.\nLearn more about [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs).","type":"object","required":["name"],"properties":{"description":{"type":["string","null"],"description":"A description of what the response format is for, used by the model to determine how to respond in the format."},"name":{"type":"string","description":"The name of the response format. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64."},"schema":{"description":"The schema for the response format, described as a JSON Schema object.\nLearn how to build JSON schemas [here](https://json-schema.org/)."},"strict":{"type":["boolean","null"],"description":"Whether to enable strict schema adherence when generating the output.\nIf set to true, the model will always follow the exact schema defined\nin the `schema` field. Only a subset of JSON Schema is supported when\n`strict` is `true`. To learn more, read the [Structured Outputs\nguide](https://platform.openai.com/docs/guides/structured-outputs)."}},"title":"ResponseFormatJsonSchema"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["json_schema"]}}}],"description":"JSON Schema response format. Used to generate structured JSON responses.\nLearn more about [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)."}],"title":"TextResponseFormatConfiguration"},"verbosity":{"oneOf":[{"type":"null"},{"description":"Constrains the verbosity of the model's response. Lower values will result in\nmore concise responses, while higher values will result in more verbose responses.\n\nCurrently supported values are `low`, `medium`, and `high`.","type":"string","enum":["low","medium","high"],"title":"Verbosity"}]}},"title":"ResponseTextParam"}]},"tool_choice":{"oneOf":[{"type":"null"},{"description":"How the model should select which tool (or tools) to use when generating\na response. See the `tools` parameter to see how to specify which tools\nthe model can call.","oneOf":[{"allOf":[{"description":"Constrains the tools available to the model to a pre-defined set.","type":"object","required":["mode","tools"],"properties":{"mode":{"description":"Constrains the tools available to the model to a pre-defined set.\n\n`auto` allows the model to pick from among the allowed tools and generate a\nmessage.\n\n`required` requires the model to call one or more of the allowed tools.","type":"string","enum":["auto","required"],"title":"ToolChoiceAllowedMode"},"tools":{"type":"array","items":{},"description":"A list of tool definitions that the model should be allowed to call.\n\nFor the Responses API, the list of tool definitions might look like:\n```json\n[\n { \"type\": \"function\", \"name\": \"get_weather\" },\n { \"type\": \"mcp\", \"server_label\": \"deepwiki\" },\n { \"type\": \"image_generation\" }\n]\n```"}},"title":"ToolChoiceAllowed"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["allowed_tools"]}}}],"description":"Constrains the tools available to the model to a pre-defined set."},{"allOf":[{"description":"Use this option to force the model to call a specific function.","type":"object","required":["name"],"properties":{"name":{"type":"string","description":"The name of the function to call."}},"title":"ToolChoiceFunction"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function"]}}}],"description":"Use this option to force the model to call a specific function."},{"allOf":[{"description":"Use this option to force the model to call a specific tool on a remote MCP server.","type":"object","required":["name","server_label"],"properties":{"name":{"type":"string","description":"The name of the tool to call on the server."},"server_label":{"type":"string","description":"The label of the MCP server to use."}},"title":"ToolChoiceMCP"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp"]}}}],"description":"Use this option to force the model to call a specific tool on a remote MCP server."},{"allOf":[{"description":"Use this option to force the model to call a custom tool.","type":"object","required":["name"],"properties":{"name":{"type":"string","description":"The name of the custom tool to call."}},"title":"ToolChoiceCustom"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom"]}}}],"description":"Use this option to force the model to call a custom tool."},{"type":"object","description":"Forces the model to call the apply_patch tool when executing a tool call.","required":["type"],"properties":{"type":{"type":"string","enum":["apply_patch"]}}},{"type":"object","description":"Forces the model to call the function shell tool when a tool call is required.","required":["type"],"properties":{"type":{"type":"string","enum":["shell"]}}},{"allOf":[{"description":"Indicates that the model should use a built-in tool to generate a response.\n[Learn more about built-in tools](https://platform.openai.com/docs/guides/tools).","oneOf":[{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_search"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_preview"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer_use_preview"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["code_interpreter"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["image_generation"]}}}],"title":"ToolChoiceTypes"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["hosted"]}}}],"description":"Indicates that the model should use a built-in tool to generate a response.\n[Learn more about built-in tools](https://platform.openai.com/docs/guides/tools)."},{"allOf":[{"description":"Controls which (if any) tool is called by the model.\n\n`none` means the model will not call any tool and instead generates a message.\n\n`auto` means the model can pick between generating a message or calling one or\nmore tools.\n\n`required` means the model must call one or more tools.","type":"string","enum":["none","auto","required"],"title":"ToolChoiceOptions"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mode"]}}}],"description":"Controls which (if any) tool is called by the model.\n\n`none` means the model will not call any tool and instead generates a message.\n\n`auto` means the model can pick between generating a message or calling one or\nmore tools.\n\n`required` means the model must call one or more tools."}],"title":"ToolChoiceParam"}]},"tools":{"type":["array","null"],"items":{"oneOf":[{"allOf":[{"description":"Defines a function in your own code the model can choose to call. Learn more about [function\ncalling](https://platform.openai.com/docs/guides/tools).","type":"object","required":["name"],"properties":{"description":{"type":["string","null"],"description":"A description of the function. Used by the model to determine whether or not to call the\nfunction."},"name":{"type":"string","description":"The name of the function to call."},"parameters":{"description":"A JSON schema object describing the parameters of the function."},"strict":{"type":["boolean","null"],"description":"Whether to enforce strict parameter validation. Default `true`."}},"title":"FunctionTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function"]}}}],"description":"Defines a function in your own code the model can choose to call. Learn more about [function\ncalling](https://platform.openai.com/docs/guides/tools)."},{"allOf":[{"description":"A tool that searches for relevant content from uploaded files. Learn more about the [file search\ntool](https://platform.openai.com/docs/guides/tools-file-search).","type":"object","required":["vector_store_ids"],"properties":{"filters":{"oneOf":[{"type":"null"},{"description":"A filter to apply.","oneOf":[{"description":"A filter used to compare a specified attribute key to a given value using a defined\ncomparison operation.","type":"object","required":["type","key","value"],"properties":{"key":{"type":"string","description":"The key to compare against the value."},"type":{"description":"Specifies the comparison operator: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`.\n- `eq`: equals\n- `ne`: not equal\n- `gt`: greater than\n- `gte`: greater than or equal\n- `lt`: less than\n- `lte`: less than or equal\n- `in`: in\n- `nin`: not in","type":"string","enum":["eq","ne","gt","gte","lt","lte","in","nin"],"title":"ComparisonType"},"value":{"description":"The value to compare against the attribute key; supports string, number, or boolean types."}},"title":"ComparisonFilter"},{"description":"Combine multiple filters using `and` or `or`.","type":"object","required":["type","filters"],"properties":{"filters":{"type":"array","items":{"oneOf":"circular()","description":"Filters for file search.","title":"Filter"},"description":"Array of filters to combine. Items can be ComparisonFilter or CompoundFilter."},"type":{"type":"string","enum":["and","or"],"description":"'Type of operation: `and` or `or`.'"}},"title":"CompoundFilter"}],"title":"Filter"}]},"max_num_results":{"type":["integer","null"],"format":"int32","description":"The maximum number of results to return. This number should be between 1 and 50 inclusive.","minimum":0},"ranking_options":{"oneOf":[{"type":"null"},{"description":"Ranking options for search.","type":"object","required":["ranker"],"properties":{"hybrid_search":{"oneOf":[{"type":"null"},{"description":"Weights that control how reciprocal rank fusion balances semantic embedding matches versus\nsparse keyword matches when hybrid search is enabled.","type":"object","required":["embedding_weight","text_weight"],"properties":{"embedding_weight":{"type":"number","format":"float","description":"The weight of the embedding in the reciprocal ranking fusion."},"text_weight":{"type":"number","format":"float","description":"The weight of the text in the reciprocal ranking fusion."}},"title":"HybridSearch"}]},"ranker":{"description":"The ranker to use for the file search.","type":"string","enum":["auto","default-2024-11-15"],"title":"RankVersionType"},"score_threshold":{"type":["number","null"],"format":"float","description":"The score threshold for the file search, a number between 0 and 1. Numbers closer to 1 will\nattempt to return only the most relevant results, but may return fewer results."}},"title":"RankingOptions"}]},"vector_store_ids":{"type":"array","items":{"type":"string"},"description":"The IDs of the vector stores to search."}},"title":"FileSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_search"]}}}],"description":"A tool that searches for relevant content from uploaded files. Learn more about the [file search\ntool](https://platform.openai.com/docs/guides/tools-file-search)."},{"allOf":[{"description":"A tool that controls a virtual computer. Learn more about the [computer\nuse tool](https://platform.openai.com/docs/guides/tools-computer-use).","type":"object","required":["environment","display_width","display_height"],"properties":{"display_height":{"type":"integer","format":"int32","description":"The height of the computer display.","minimum":0},"display_width":{"type":"integer","format":"int32","description":"The width of the computer display.","minimum":0},"environment":{"description":"The type of computer environment to control.","type":"string","enum":["windows","mac","linux","ubuntu","browser"],"title":"ComputerEnvironment"}},"title":"ComputerUsePreviewTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer_use_preview"]}}}],"description":"A tool that controls a virtual computer. Learn more about the [computer\nuse tool](https://platform.openai.com/docs/guides/tools-computer-use)."},{"allOf":[{"description":"Search the Internet for sources related to the prompt. Learn more about the\n[web search tool](https://platform.openai.com/docs/guides/tools-web-search).","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","required":["type"],"properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Always `approximate`.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search"]}}}],"description":"Search the Internet for sources related to the prompt. Learn more about the\n[web search tool](https://platform.openai.com/docs/guides/tools-web-search)."},{"allOf":[{"description":"type: web_search_2025_08_26","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","required":["type"],"properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Always `approximate`.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_2025_08_26"]}}}],"description":"type: web_search_2025_08_26"},{"allOf":[{"description":"Give the model access to additional tools via remote Model Context Protocol\n(MCP) servers. [Learn more about MCP](https://platform.openai.com/docs/guides/tools-remote-mcp).","type":"object","required":["server_label"],"properties":{"allowed_tools":{"oneOf":[{"type":"null"},{"description":"List of allowed tool names or a filter object.","oneOf":[{"type":"array","items":{"type":"string"},"description":"A string array of allowed tool names"},{"description":"A filter object to specify which tools are allowed.","type":"object","properties":{"read_only":{"type":["boolean","null"],"description":"Indicates whether or not a tool modifies data or is read-only.\nIf an MCP server is annotated with [readOnlyHint](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\nit will match this filter."},"tool_names":{"type":["array","null"],"items":{"type":"string"},"description":"List of allowed tool names."}},"title":"MCPToolFilter"}],"title":"MCPToolAllowedTools"}]},"authorization":{"type":["string","null"],"description":"An OAuth access token that can be used with a remote MCP server, either with a custom MCP\nserver URL or a service connector. Your application must handle the OAuth authorization\nflow and provide the token here."},"connector_id":{"oneOf":[{"type":"null"},{"description":"Identifier for service connectors, like those available in ChatGPT. One of `server_url` or\n`connector_id` must be provided. Learn more about service connectors [here](https://platform.openai.com/docs/guides/tools-remote-mcp#connectors).\n\nCurrently supported `connector_id` values are:\n- Dropbox: `connector_dropbox`\n- Gmail: `connector_gmail`\n- Google Calendar: `connector_googlecalendar`\n- Google Drive: `connector_googledrive`\n- Microsoft Teams: `connector_microsoftteams`\n- Outlook Calendar: `connector_outlookcalendar`\n- Outlook Email: `connector_outlookemail`\n- SharePoint: `connector_sharepoint`","type":"string","enum":["connector_dropbox","connector_gmail","connector_googlecalendar","connector_googledrive","connector_microsoftteams","connector_outlookcalendar","connector_outlookemail","connector_sharepoint"],"title":"McpToolConnectorId"}]},"headers":{"description":"Optional HTTP headers to send to the MCP server. Use for authentication or other purposes."},"require_approval":{"oneOf":[{"type":"null"},{"description":"Specify which of the MCP server's tools require approval.","oneOf":[{"description":"Specify which of the MCP server's tools require approval. Can be\n`always`, `never`, or a filter object associated with tools\nthat require approval.","type":"object","properties":{"always":{"oneOf":[{"type":"null"},{"description":"A list of tools that always require approval.","type":"object","properties":{"read_only":{"type":["boolean","null"],"description":"Indicates whether or not a tool modifies data or is read-only.\nIf an MCP server is annotated with [readOnlyHint](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\nit will match this filter."},"tool_names":{"type":["array","null"],"items":{"type":"string"},"description":"List of allowed tool names."}},"title":"MCPToolFilter"}]},"never":{"oneOf":[{"type":"null"},{"description":"A list of tools that never require approval.","type":"object","properties":{"read_only":{"type":["boolean","null"],"description":"Indicates whether or not a tool modifies data or is read-only.\nIf an MCP server is annotated with [readOnlyHint](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\nit will match this filter."},"tool_names":{"type":["array","null"],"items":{"type":"string"},"description":"List of allowed tool names."}},"title":"MCPToolFilter"}]}},"title":"MCPToolApprovalFilter"},{"description":"Specify a single approval policy for all tools. One of `always` or\n`never`. When set to `always`, all tools will require approval. When\nset to `never`, all tools will not require approval.","type":"string","enum":["always","never"],"title":"MCPToolApprovalSetting"}],"title":"MCPToolRequireApproval"}]},"server_description":{"type":["string","null"],"description":"Optional description of the MCP server, used to provide more context."},"server_label":{"type":"string","description":"A label for this MCP server, used to identify it in tool calls."},"server_url":{"type":["string","null"],"description":"The URL for the MCP server. One of `server_url` or `connector_id` must be provided."}},"title":"MCPTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp"]}}}],"description":"Give the model access to additional tools via remote Model Context Protocol\n(MCP) servers. [Learn more about MCP](https://platform.openai.com/docs/guides/tools-remote-mcp)."},{"allOf":[{"description":"A tool that runs Python code to help generate a response to a prompt.","type":"object","required":["container"],"properties":{"container":{"description":"The code interpreter container. Can be a container ID or an object that\nspecifies uploaded file IDs to make available to your code, along with an\noptional `memory_limit` setting.","oneOf":[{"allOf":[{"description":"Configuration for a code interpreter container. Optionally specify the IDs of the\nfiles to run the code on.","type":"object","properties":{"file_ids":{"type":["array","null"],"items":{"type":"string"},"description":"An optional list of uploaded files to make available to your code."},"memory_limit":{"type":["integer","null"],"format":"int64","minimum":0}},"title":"CodeInterpreterContainerAuto"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["auto"]}}}],"description":"Configuration for a code interpreter container. Optionally specify the IDs of the\nfiles to run the code on."},{"type":"object","description":"The container ID.","required":["type"],"properties":{"type":{"type":"string","enum":["container_i_d"]}}}],"title":"CodeInterpreterToolContainer"}},"title":"CodeInterpreterTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["code_interpreter"]}}}],"description":"A tool that runs Python code to help generate a response to a prompt."},{"allOf":[{"description":"A tool that generates images using a model like `gpt-image-1`.","type":"object","properties":{"background":{"oneOf":[{"type":"null"},{"description":"Background type for the generated image. One of `transparent`,\n`opaque`, or `auto`. Default: `auto`.","type":"string","enum":["transparent","opaque","auto"],"title":"ImageGenToolBackground"}]},"input_fidelity":{"oneOf":[{"type":"null"},{"description":"Control how much effort the model will exert to match the style and features, especially facial features,\nof input images. This parameter is only supported for `gpt-image-1`. Unsupported\nfor `gpt-image-1-mini`. Supports `high` and `low`. Defaults to `low`.","type":"string","enum":["high","low"],"title":"InputFidelity"}]},"input_image_mask":{"oneOf":[{"type":"null"},{"description":"Optional mask for inpainting. Contains `image_url`\n(string, optional) and `file_id` (string, optional).","type":"object","properties":{"file_id":{"type":["string","null"],"description":"File ID for the mask image."},"image_url":{"type":["string","null"],"description":"Base64-encoded mask image."}},"title":"ImageGenToolInputImageMask"}]},"model":{"type":["string","null"],"description":"The image generation model to use. Default: `gpt-image-1`."},"moderation":{"oneOf":[{"type":"null"},{"description":"Moderation level for the generated image. Default: `auto`.","type":"string","enum":["auto","low"],"title":"ImageGenToolModeration"}]},"output_compression":{"type":["integer","null"],"format":"int32","description":"Compression level for the output image. Default: 100.","minimum":0},"output_format":{"oneOf":[{"type":"null"},{"description":"The output format of the generated image. One of `png`, `webp`, or\n`jpeg`. Default: `png`.","type":"string","enum":["png","webp","jpeg"],"title":"ImageGenToolOutputFormat"}]},"partial_images":{"type":["integer","null"],"format":"int32","description":"Number of partial images to generate in streaming mode, from 0 (default value) to 3.","minimum":0},"quality":{"oneOf":[{"type":"null"},{"description":"The quality of the generated image. One of `low`, `medium`, `high`,\nor `auto`. Default: `auto`.","type":"string","enum":["low","medium","high","auto"],"title":"ImageGenToolQuality"}]},"size":{"oneOf":[{"type":"null"},{"description":"The size of the generated image. One of `1024x1024`, `1024x1536`,\n`1536x1024`, or `auto`. Default: `auto`.","type":"string","enum":["auto","1024x1024","1024x1536","1536x1024"],"title":"ImageGenToolSize"}]}},"title":"ImageGenTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["image_generation"]}}}],"description":"A tool that generates images using a model like `gpt-image-1`."},{"type":"object","description":"A tool that allows the model to execute shell commands in a local environment.","required":["type"],"properties":{"type":{"type":"string","enum":["local_shell"]}}},{"type":"object","description":"A tool that allows the model to execute shell commands.","required":["type"],"properties":{"type":{"type":"string","enum":["shell"]}}},{"allOf":[{"description":"A custom tool that processes input using a specified format. Learn more about [custom\ntools](https://platform.openai.com/docs/guides/function-calling#custom-tools)","type":"object","required":["name","format"],"properties":{"description":{"type":["string","null"],"description":"Optional description of the custom tool, used to provide more context."},"format":{"description":"The input format for the custom tool. Default is unconstrained text.","oneOf":[{"type":"object","description":"Unconstrained free-form text.","required":["type"],"properties":{"type":{"type":"string","enum":["text"]}}},{"allOf":[{"description":"A grammar defined by the user.","type":"object","required":["definition","syntax"],"properties":{"definition":{"type":"string","description":"The grammar definition."},"syntax":{"description":"The syntax of the grammar definition. One of `lark` or `regex`.","type":"string","enum":["lark","regex"],"title":"GrammarSyntax"}},"title":"CustomGrammarFormatParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["grammar"]}}}],"description":"A grammar defined by the user."}],"title":"CustomToolParamFormat"},"name":{"type":"string","description":"The name of the custom tool, used to identify it in tool calls."}},"title":"CustomToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom"]}}}],"description":"A custom tool that processes input using a specified format. Learn more about [custom\ntools](https://platform.openai.com/docs/guides/function-calling#custom-tools)"},{"allOf":[{"description":" This tool searches the web for relevant results to use in a response. Learn more about the [web search\ntool](https://platform.openai.com/docs/guides/tools-web-search).","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","required":["type"],"properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Always `approximate`.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_preview"]}}}],"description":" This tool searches the web for relevant results to use in a response. Learn more about the [web search\ntool](https://platform.openai.com/docs/guides/tools-web-search)."},{"allOf":[{"description":"type: web_search_preview_2025_03_11","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","required":["type"],"properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Always `approximate`.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_preview_2025_03_11"]}}}],"description":"type: web_search_preview_2025_03_11"},{"type":"object","description":"Allows the assistant to create, delete, or update files using unified diffs.","required":["type"],"properties":{"type":{"type":"string","enum":["apply_patch"]}}}],"description":"Definitions for model-callable tools.","title":"Tool"},"description":"An array of tools the model may call while generating a response. You\ncan specify which tool to use by setting the `tool_choice` parameter.\n\nWe support the following categories of tools:\n- **Built-in tools**: Tools that are provided by OpenAI that extend the\n model's capabilities, like [web search](https://platform.openai.com/docs/guides/tools-web-search)\n or [file search](https://platform.openai.com/docs/guides/tools-file-search). Learn more about\n [built-in tools](https://platform.openai.com/docs/guides/tools).\n- **MCP Tools**: Integrations with third-party systems via custom MCP servers\n or predefined connectors such as Google Drive and SharePoint. Learn more about\n [MCP Tools](https://platform.openai.com/docs/guides/tools-connectors-mcp).\n- **Function calls (custom tools)**: Functions that are defined by you,\n enabling the model to call your own code with strongly typed arguments\n and outputs. Learn more about\n [function calling](https://platform.openai.com/docs/guides/function-calling). You can also use\n custom tools to call your own code."},"top_logprobs":{"type":["integer","null"],"format":"int32","description":"An integer between 0 and 20 specifying the number of most likely tokens to return at each\ntoken position, each with an associated log probability.","minimum":0},"top_p":{"type":["number","null"],"format":"float","description":"An alternative to sampling with temperature, called nucleus sampling,\nwhere the model considers the results of the tokens with top_p probability\nmass. So 0.1 means only the tokens comprising the top 10% probability mass\nare considered.\n\nWe generally recommend altering this or `temperature` but not both."},"truncation":{"oneOf":[{"type":"null"},{"description":"The truncation strategy to use for the model response.\n - `auto`: If the input to this Response exceeds\n the model's context window size, the model will truncate the\n response to fit the context window by dropping items from the beginning of the conversation.\n - `disabled` (default): If the input size will exceed the context window\n size for a model, the request will fail with a 400 error.","type":"string","enum":["auto","disabled"],"title":"Truncation"}]}},"title":"CreateResponse"},"example":{"model":"gpt-4o","input":"You are a helpful assistant.","stream":false}}},"required":true}} \ No newline at end of file +{"title":"Body","body":{"description":"Create a response using the OpenAI Responses API format. This endpoint provides a more flexible conversation interface compared to Chat Completions.","content":{"application/json":{"schema":{"type":"object","description":"Builder for a Responses API request.","required":["input"],"properties":{"background":{"type":["boolean","null"],"description":"Whether to run the model response in the background.\n[Learn more](https://platform.openai.com/docs/guides/background)."},"conversation":{"oneOf":[{"type":"null"},{"description":"The conversation that this response belongs to. Items from this conversation are prepended to\n `input_items` for this response request.\n\nInput items and output items from this response are automatically added to this conversation after\nthis response completes.","oneOf":[{"type":"string","description":"The unique ID of the conversation."},{"description":"The conversation that this response belongs to.","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The unique ID of the conversation that this response was associated with."}},"title":"Conversation"}],"title":"ConversationParam"}]},"include":{"type":["array","null"],"items":{"type":"string","enum":["file_search_call.results","web_search_call.results","web_search_call.action.sources","message.input_image.image_url","computer_call_output.output.image_url","code_interpreter_call.outputs","reasoning.encrypted_content","message.output_text.logprobs"],"title":"IncludeEnum"},"description":"Specify additional output data to include in the model response. Currently supported\nvalues are:\n\n- `web_search_call.action.sources`: Include the sources of the web search tool call.\n\n- `code_interpreter_call.outputs`: Includes the outputs of python code execution in code\n interpreter tool call items.\n\n- `computer_call_output.output.image_url`: Include image urls from the computer call\n output.\n\n- `file_search_call.results`: Include the search results of the file search tool call.\n\n- `message.input_image.image_url`: Include image urls from the input message.\n\n- `message.output_text.logprobs`: Include logprobs with assistant messages.\n\n- `reasoning.encrypted_content`: Includes an encrypted version of reasoning tokens in\n reasoning item outputs. This enables reasoning items to be used in multi-turn\n conversations when using the Responses API statelessly (like when the `store` parameter is\n set to `false`, or when an organization is enrolled in the zero data retention program)."},"input":{"description":"Text, image, or file inputs to the model, used to generate a response.\n\nLearn more:\n- [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n- [Image inputs](https://platform.openai.com/docs/guides/images)\n- [File inputs](https://platform.openai.com/docs/guides/pdf-files)\n- [Conversation state](https://platform.openai.com/docs/guides/conversation-state)\n- [Function calling](https://platform.openai.com/docs/guides/function-calling)","oneOf":[{"type":"string","description":" A text input to the model, equivalent to a text input with the\n`user` role."},{"type":"array","items":{"oneOf":[{"description":"A reference to an existing item by ID.\nHas a required `id` field and optional `type` (can be \"item_reference\" or null).\nMust be tried first as it's the most minimal structure.","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The ID of the item to reference."},"type":{"oneOf":[{"type":"null"},{"description":"The type of item to reference. Can be \"item_reference\" or null.","type":"string","enum":["item_reference"],"title":"ItemReferenceType"}]}},"title":"ItemReference"},{"description":"All structured items with proper type discrimination.\nIncludes InputMessage, OutputMessage, and all tool calls/outputs.\nUses the discriminated `Item` enum for efficient, type-safe deserialization.","oneOf":[{"allOf":[{"description":"A message (type: \"message\").\nCan represent InputMessage (user/system/developer) or OutputMessage (assistant).\n\nInputMessage:\n A message input to the model with a role indicating instruction following hierarchy.\n Instructions given with the developer or system role take precedence over instructions given with the user role.\nOutputMessage:\n A message output from the model.","oneOf":[{"description":"An output message from the model (role: assistant, has required id & status).\nThis must come first as it has the most specific structure (required id and status fields).","type":"object","required":["content","id","role","status"],"properties":{"content":{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A text output from the model.","type":"object","required":["annotations","text"],"properties":{"annotations":{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A citation to a file.","type":"object","required":["file_id","filename","index"],"properties":{"file_id":{"type":"string","description":"The ID of the file."},"filename":{"type":"string","description":"The filename of the file cited."},"index":{"type":"integer","format":"int32","description":"The index of the file in the list of files.","minimum":0}},"title":"FileCitationBody"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_citation"]}}}],"description":"A citation to a file."},{"allOf":[{"description":"A citation for a web resource used to generate a model response.","type":"object","required":["end_index","start_index","title","url"],"properties":{"end_index":{"type":"integer","format":"int32","description":"The index of the last character of the URL citation in the message.","minimum":0},"start_index":{"type":"integer","format":"int32","description":"The index of the first character of the URL citation in the message.","minimum":0},"title":{"type":"string","description":"The title of the web resource."},"url":{"type":"string","description":"The URL of the web resource."}},"title":"UrlCitationBody"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["url_citation"]}}}],"description":"A citation for a web resource used to generate a model response."},{"allOf":[{"description":"A citation for a container file used to generate a model response.","type":"object","required":["container_id","end_index","file_id","filename","start_index"],"properties":{"container_id":{"type":"string","description":"The ID of the container file."},"end_index":{"type":"integer","format":"int32","description":"The index of the last character of the container file citation in the message.","minimum":0},"file_id":{"type":"string","description":"The ID of the file."},"filename":{"type":"string","description":"The filename of the container file cited."},"start_index":{"type":"integer","format":"int32","description":"The index of the first character of the container file citation in the message.","minimum":0}},"title":"ContainerFileCitationBody"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["container_file_citation"]}}}],"description":"A citation for a container file used to generate a model response."},{"allOf":[{"description":"A path to a file.","type":"object","required":["file_id","index"],"properties":{"file_id":{"type":"string","description":"The ID of the file."},"index":{"type":"integer","format":"int32","description":"The index of the file in the list of files.","minimum":0}},"title":"FilePath"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_path"]}}}],"description":"A path to a file."}],"description":"An annotation that applies to a span of output text.","title":"Annotation"},"description":"The annotations of the text output."},"logprobs":{"type":["array","null"],"items":{"type":"object","required":["bytes","logprob","token","top_logprobs"],"properties":{"bytes":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"logprob":{"type":"number","format":"double"},"token":{"type":"string"},"top_logprobs":{"type":"array","items":{"type":"object","required":["bytes","logprob","token"],"properties":{"bytes":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"logprob":{"type":"number","format":"double"},"token":{"type":"string"}},"title":"TopLogProb"}}},"title":"LogProb"}},"text":{"type":"string","description":"The text output from the model."}},"title":"OutputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["output_text"]}}}],"description":"A text output from the model."},{"allOf":[{"description":"A refusal from the model.","type":"object","required":["refusal"],"properties":{"refusal":{"type":"string","description":"The refusal explanation from the model."}},"title":"RefusalContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["refusal"]}}}],"description":"A refusal from the model."}],"title":"OutputMessageContent"},"description":"The content of the output message."},"id":{"type":"string","description":"The unique ID of the output message."},"phase":{"oneOf":[{"type":"null"},{"description":"Labels this assistant message as intermediate commentary (`commentary`) or\nthe final answer (`final_answer`).","type":"string","enum":["commentary","final_answer"],"title":"MessagePhase"}]},"role":{"description":"The role of the output message. Always `assistant`.","type":"string","enum":["assistant"],"title":"AssistantRole"},"status":{"description":"The status of the message input. One of `in_progress`, `completed`, or\n`incomplete`. Populated when input items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}},"title":"OutputMessage"},{"description":"A structured input message (role: user/system/developer, content is `Vec`).\nHas structured content list and optional id/status fields.\n\nA message input to the model with a role indicating instruction following hierarchy.\nInstructions given with the `developer` or `system` role take precedence over instructions\ngiven with the `user` role.","type":"object","required":["content","role"],"properties":{"content":{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A text input to the model.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text input to the model."}},"title":"InputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_text"]}}}],"description":"A text input to the model."},{"allOf":[{"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision).","type":"object","properties":{"detail":{"description":"The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`.\nDefaults to `auto` when omitted in JSON input.","type":"string","enum":["auto","low","high","original"],"title":"ImageDetail"},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"image_url":{"type":["string","null"],"description":"The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image\nin a data URL."}},"title":"InputImageContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_image"]}}}],"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision)."},{"allOf":[{"description":"A file input to the model.","type":"object","properties":{"detail":{"oneOf":[{"type":"null"},{"description":"The detail level of the file to be sent to the model. Use `low` for the default rendering\nbehavior, or `high` to render the file at higher quality. Defaults to `low`.","type":"string","enum":["low","high"],"title":"FileInputDetail"}]},"file_data":{"type":["string","null"],"description":"The content of the file to be sent to the model."},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"file_url":{"type":["string","null"],"description":"The URL of the file to be sent to the model."},"filename":{"type":["string","null"],"description":"The name of the file to be sent to the model."}},"title":"InputFileContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_file"]}}}],"description":"A file input to the model."}],"description":"Parts of a message: text, image, file, or audio.","title":"InputContent"},"description":"A list of one or many input items to the model, containing different content types."},"role":{"description":"The role of the message input. One of `user`, `system`, or `developer`.\nNote: `assistant` is NOT allowed here; use OutputMessage instead.","type":"string","enum":["user","system","developer"],"title":"InputRole"},"status":{"oneOf":[{"type":"null"},{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]}},"title":"InputMessage"}],"title":"MessageItem"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["message"]}}}],"description":"A message (type: \"message\").\nCan represent InputMessage (user/system/developer) or OutputMessage (assistant).\n\nInputMessage:\n A message input to the model with a role indicating instruction following hierarchy.\n Instructions given with the developer or system role take precedence over instructions given with the user role.\nOutputMessage:\n A message output from the model."},{"allOf":[{"description":"The results of a file search tool call. See the\n[file search guide](https://platform.openai.com/docs/guides/tools-file-search) for more information.","type":"object","required":["id","queries","status"],"properties":{"id":{"type":"string","description":"The unique ID of the file search tool call."},"queries":{"type":"array","items":{"type":"string"},"description":"The queries used to search for files."},"results":{"type":["array","null"],"items":{"type":"object","description":"A single result from a file search.","required":["attributes","file_id","filename","score","text"],"properties":{"attributes":{"type":"object","description":"Set of 16 key-value pairs that can be attached to an object. This can be useful for storing\nadditional information about the object in a structured format, and querying for objects\nAPI or the dashboard. Keys are strings with a maximum length of 64 characters\n. Values are strings with a maximum length of 512 characters, booleans, or numbers.","additionalProperties":{},"propertyNames":{"type":"string"}},"file_id":{"type":"string","description":"The unique ID of the file."},"filename":{"type":"string","description":"The name of the file."},"score":{"type":"number","format":"float","description":"The relevance score of the file - a value between 0 and 1."},"text":{"type":"string","description":"The text that was retrieved from the file."}},"title":"FileSearchToolCallResult"},"description":"The results of the file search tool call."},"status":{"description":"The status of the file search tool call. One of `in_progress`, `searching`,\n`incomplete`,`failed`, or `completed`.","type":"string","enum":["in_progress","searching","incomplete","failed","completed"],"title":"FileSearchToolCallStatus"}},"title":"FileSearchToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_search_call"]}}}],"description":"The results of a file search tool call. See the\n[file search guide](https://platform.openai.com/docs/guides/tools-file-search) for more information."},{"allOf":[{"description":"A tool call to a computer use tool. See the\n[computer use guide](https://platform.openai.com/docs/guides/tools-computer-use) for more information.","type":"object","required":["call_id","id","pending_safety_checks","status"],"properties":{"action":{"oneOf":[{"type":"null"},{"oneOf":[{"allOf":[{"description":"A click action.","type":"object","required":["button","x","y"],"properties":{"button":{"description":"Indicates which mouse button was pressed during the click. One of `left`,\n`right`, `wheel`, `back`, or `forward`.","type":"string","enum":["left","right","wheel","back","forward"],"title":"ClickButtonType"},"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while clicking."},"x":{"type":"integer","format":"int32","description":"The x-coordinate where the click occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the click occurred."}},"title":"ClickParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["click"]}}}],"description":"A click action."},{"allOf":[{"description":"A double click action.","type":"object","required":["x","y"],"properties":{"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while double clicking."},"x":{"type":"integer","format":"int32","description":"The x-coordinate where the double click occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the double click occurred."}},"title":"DoubleClickAction"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["double_click"]}}}],"description":"A double click action."},{"allOf":[{"description":"A drag action.","type":"object","required":["path"],"properties":{"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while dragging the mouse."},"path":{"type":"array","items":{"type":"object","description":"An x/y coordinate pair.","required":["x","y"],"properties":{"x":{"type":"integer","format":"int32","description":"The x-coordinate."},"y":{"type":"integer","format":"int32","description":"The y-coordinate."}},"title":"CoordParam"},"description":"An array of coordinates representing the path of the drag action."}},"title":"DragParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["drag"]}}}],"description":"A drag action."},{"allOf":[{"description":"A collection of keypresses the model would like to perform.","type":"object","required":["keys"],"properties":{"keys":{"type":"array","items":{"type":"string"},"description":"The combination of keys the model is requesting to be pressed.\nThis is an array of strings, each representing a key."}},"title":"KeyPressAction"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["keypress"]}}}],"description":"A collection of keypresses the model would like to perform."},{"allOf":[{"description":"A mouse move action.","type":"object","required":["x","y"],"properties":{"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while moving the mouse."},"x":{"type":"integer","format":"int32","description":"The x-coordinate to move to."},"y":{"type":"integer","format":"int32","description":"The y-coordinate to move to."}},"title":"MoveParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["move"]}}}],"description":"A mouse move action."},{"type":"object","description":"A screenshot action.","required":["type"],"properties":{"type":{"type":"string","enum":["screenshot"]}}},{"allOf":[{"description":"A scroll action.","type":"object","required":["scroll_x","scroll_y","x","y"],"properties":{"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while scrolling."},"scroll_x":{"type":"integer","format":"int32","description":"The horizontal scroll distance."},"scroll_y":{"type":"integer","format":"int32","description":"The vertical scroll distance."},"x":{"type":"integer","format":"int32","description":"The x-coordinate where the scroll occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the scroll occurred."}},"title":"ScrollParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["scroll"]}}}],"description":"A scroll action."},{"allOf":[{"description":"An action to type in text.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text to type."}},"title":"TypeParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["type"]}}}],"description":"An action to type in text."},{"type":"object","description":"A wait action.","required":["type"],"properties":{"type":{"type":"string","enum":["wait"]}}}],"description":"Represents all user‐triggered actions.","title":"ComputerAction"}]},"actions":{"type":["array","null"],"items":{"oneOf":[{"allOf":[{"description":"A click action.","type":"object","required":["button","x","y"],"properties":{"button":{"description":"Indicates which mouse button was pressed during the click. One of `left`,\n`right`, `wheel`, `back`, or `forward`.","type":"string","enum":["left","right","wheel","back","forward"],"title":"ClickButtonType"},"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while clicking."},"x":{"type":"integer","format":"int32","description":"The x-coordinate where the click occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the click occurred."}},"title":"ClickParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["click"]}}}],"description":"A click action."},{"allOf":[{"description":"A double click action.","type":"object","required":["x","y"],"properties":{"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while double clicking."},"x":{"type":"integer","format":"int32","description":"The x-coordinate where the double click occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the double click occurred."}},"title":"DoubleClickAction"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["double_click"]}}}],"description":"A double click action."},{"allOf":[{"description":"A drag action.","type":"object","required":["path"],"properties":{"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while dragging the mouse."},"path":{"type":"array","items":{"type":"object","description":"An x/y coordinate pair.","required":["x","y"],"properties":{"x":{"type":"integer","format":"int32","description":"The x-coordinate."},"y":{"type":"integer","format":"int32","description":"The y-coordinate."}},"title":"CoordParam"},"description":"An array of coordinates representing the path of the drag action."}},"title":"DragParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["drag"]}}}],"description":"A drag action."},{"allOf":[{"description":"A collection of keypresses the model would like to perform.","type":"object","required":["keys"],"properties":{"keys":{"type":"array","items":{"type":"string"},"description":"The combination of keys the model is requesting to be pressed.\nThis is an array of strings, each representing a key."}},"title":"KeyPressAction"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["keypress"]}}}],"description":"A collection of keypresses the model would like to perform."},{"allOf":[{"description":"A mouse move action.","type":"object","required":["x","y"],"properties":{"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while moving the mouse."},"x":{"type":"integer","format":"int32","description":"The x-coordinate to move to."},"y":{"type":"integer","format":"int32","description":"The y-coordinate to move to."}},"title":"MoveParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["move"]}}}],"description":"A mouse move action."},{"type":"object","description":"A screenshot action.","required":["type"],"properties":{"type":{"type":"string","enum":["screenshot"]}}},{"allOf":[{"description":"A scroll action.","type":"object","required":["scroll_x","scroll_y","x","y"],"properties":{"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while scrolling."},"scroll_x":{"type":"integer","format":"int32","description":"The horizontal scroll distance."},"scroll_y":{"type":"integer","format":"int32","description":"The vertical scroll distance."},"x":{"type":"integer","format":"int32","description":"The x-coordinate where the scroll occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the scroll occurred."}},"title":"ScrollParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["scroll"]}}}],"description":"A scroll action."},{"allOf":[{"description":"An action to type in text.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text to type."}},"title":"TypeParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["type"]}}}],"description":"An action to type in text."},{"type":"object","description":"A wait action.","required":["type"],"properties":{"type":{"type":"string","enum":["wait"]}}}],"description":"Represents all user‐triggered actions.","title":"ComputerAction"},"description":"Flattened batched actions for `computer_use`. Each action includes a\n`type` discriminator and action-specific fields."},"call_id":{"type":"string","description":"An identifier used when responding to the tool call with output."},"id":{"type":"string","description":"The unique ID of the computer call."},"pending_safety_checks":{"type":"array","items":{"type":"object","required":["id"],"properties":{"code":{"type":["string","null"],"description":"The type of the pending safety check."},"id":{"type":"string","description":"The ID of the pending safety check."},"message":{"type":["string","null"],"description":"Details about the pending safety check."}},"title":"ComputerCallSafetyCheckParam"},"description":"The pending safety checks for the computer call."},"status":{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}},"title":"ComputerToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer_call"]}}}],"description":"A tool call to a computer use tool. See the\n[computer use guide](https://platform.openai.com/docs/guides/tools-computer-use) for more information."},{"allOf":[{"description":"The output of a computer tool call.","type":"object","required":["call_id","output"],"properties":{"acknowledged_safety_checks":{"type":["array","null"],"items":{"type":"object","required":["id"],"properties":{"code":{"type":["string","null"],"description":"The type of the pending safety check."},"id":{"type":"string","description":"The ID of the pending safety check."},"message":{"type":["string","null"],"description":"Details about the pending safety check."}},"title":"ComputerCallSafetyCheckParam"},"description":"The safety checks reported by the API that have been acknowledged by the developer."},"call_id":{"type":"string","description":"The ID of the computer tool call that produced the output."},"id":{"type":["string","null"],"description":"The unique ID of the computer tool call output. Optional when creating."},"output":{"description":"A computer screenshot image used with the computer use tool.","type":"object","required":["type"],"properties":{"file_id":{"type":["string","null"],"description":"The identifier of an uploaded file that contains the screenshot."},"image_url":{"type":["string","null"],"description":"The URL of the screenshot image."},"type":{"description":"Specifies the event type. For a computer screenshot, this property is always\nset to `computer_screenshot`.","type":"string","enum":["computer_screenshot"],"title":"ComputerScreenshotImageType"}},"title":"ComputerScreenshotImage"},"status":{"oneOf":[{"type":"null"},{"description":"The status of the message input. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when input items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]}},"title":"ComputerCallOutputItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer_call_output"]}}}],"description":"The output of a computer tool call."},{"allOf":[{"description":"The results of a web search tool call. See the\n[web search guide](https://platform.openai.com/docs/guides/tools-web-search) for more information.","type":"object","required":["id","status"],"properties":{"action":{"oneOf":[{"type":"null"},{"description":"An object describing the specific action taken in this web search call. Includes\ndetails on how the model used the web (search, open_page, find, find_in_page).\n\nThis is optional because `response.output_item.added` events can include\nin-progress web search calls before OpenAI has populated the action.\nSee .","oneOf":[{"allOf":[{"description":"Action type \"search\" - Performs a web search query.","type":"object","required":["query"],"properties":{"query":{"type":"string","description":"The search query."},"sources":{"type":["array","null"],"items":{"type":"object","required":["type","url"],"properties":{"type":{"type":"string","description":"The type of source. Always `url`."},"url":{"type":"string","description":"The URL of the source."}},"title":"WebSearchActionSearchSource"},"description":"The sources used in the search."}},"title":"WebSearchActionSearch"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["search"]}}}],"description":"Action type \"search\" - Performs a web search query."},{"allOf":[{"description":"Action type \"open_page\" - Opens a specific URL from search results.","type":"object","properties":{"url":{"type":["string","null"],"description":"The URL opened by the model."}},"title":"WebSearchActionOpenPage"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["open_page"]}}}],"description":"Action type \"open_page\" - Opens a specific URL from search results."},{"allOf":[{"description":"Action type \"find\": Searches for a pattern within a loaded page.","type":"object","required":["url","pattern"],"properties":{"pattern":{"type":"string","description":"The pattern or text to search for within the page."},"url":{"type":"string","description":"The URL of the page searched for the pattern."}},"title":"WebSearchActionFind"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["find"]}}}],"description":"Action type \"find\": Searches for a pattern within a loaded page."},{"allOf":[{"description":"Action type \"find_in_page\": ","type":"object","required":["url","pattern"],"properties":{"pattern":{"type":"string","description":"The pattern or text to search for within the page."},"url":{"type":"string","description":"The URL of the page searched for the pattern."}},"title":"WebSearchActionFind"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["find_in_page"]}}}],"description":"Action type \"find_in_page\": "}],"title":"WebSearchToolCallAction"}]},"id":{"type":"string","description":"The unique ID of the web search tool call."},"status":{"description":"The status of the web search tool call.","type":"string","enum":["in_progress","searching","completed","failed"],"title":"WebSearchToolCallStatus"}},"title":"WebSearchToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_call"]}}}],"description":"The results of a web search tool call. See the\n[web search guide](https://platform.openai.com/docs/guides/tools-web-search) for more information."},{"allOf":[{"description":"A tool call to run a function. See the\n\n[function calling guide](https://platform.openai.com/docs/guides/function-calling) for more information.","type":"object","required":["arguments","call_id","name"],"properties":{"arguments":{"type":"string","description":"A JSON string of the arguments to pass to the function."},"call_id":{"type":"string","description":"The unique ID of the function tool call generated by the model."},"id":{"type":["string","null"],"description":"The unique ID of the function tool call."},"name":{"type":"string","description":"The name of the function to run."},"namespace":{"type":["string","null"],"description":"The namespace of the function to run."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]}},"title":"FunctionToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function_call"]}}}],"description":"A tool call to run a function. See the\n\n[function calling guide](https://platform.openai.com/docs/guides/function-calling) for more information."},{"allOf":[{"description":"The output of a function tool call.","type":"object","required":["call_id","output"],"properties":{"call_id":{"type":"string","description":"The unique ID of the function tool call generated by the model."},"id":{"type":["string","null"],"description":"The unique ID of the function tool call output.\nPopulated when this item is returned via API."},"output":{"description":"Text, image, or file output of the function tool call.","oneOf":[{"type":"string","description":"A JSON string of the output of the function tool call."},{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A text input to the model.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text input to the model."}},"title":"InputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_text"]}}}],"description":"A text input to the model."},{"allOf":[{"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision).","type":"object","properties":{"detail":{"description":"The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`.\nDefaults to `auto` when omitted in JSON input.","type":"string","enum":["auto","low","high","original"],"title":"ImageDetail"},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"image_url":{"type":["string","null"],"description":"The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image\nin a data URL."}},"title":"InputImageContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_image"]}}}],"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision)."},{"allOf":[{"description":"A file input to the model.","type":"object","properties":{"detail":{"oneOf":[{"type":"null"},{"description":"The detail level of the file to be sent to the model. Use `low` for the default rendering\nbehavior, or `high` to render the file at higher quality. Defaults to `low`.","type":"string","enum":["low","high"],"title":"FileInputDetail"}]},"file_data":{"type":["string","null"],"description":"The content of the file to be sent to the model."},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"file_url":{"type":["string","null"],"description":"The URL of the file to be sent to the model."},"filename":{"type":["string","null"],"description":"The name of the file to be sent to the model."}},"title":"InputFileContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_file"]}}}],"description":"A file input to the model."}],"description":"Parts of a message: text, image, file, or audio.","title":"InputContent"}}],"title":"FunctionCallOutput"},"status":{"oneOf":[{"type":"null"},{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]}},"title":"FunctionCallOutputItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function_call_output"]}}}],"description":"The output of a function tool call."},{"allOf":[{"description":"A tool search call.","type":"object","properties":{"arguments":{"description":"The arguments supplied to the tool search call."},"call_id":{"type":["string","null"],"description":"The unique ID of the tool search call generated by the model."},"execution":{"oneOf":[{"type":"null"},{"description":"Whether tool search was executed by the server or by the client.","type":"string","enum":["server","client"],"title":"ToolSearchExecutionType"}]},"id":{"type":["string","null"],"description":"The unique ID of this tool search call."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the tool search call.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]}},"title":"ToolSearchCallItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["tool_search_call"]}}}],"description":"A tool search call."},{"allOf":[{"description":"A tool search output.","type":"object","required":["tools"],"properties":{"call_id":{"type":["string","null"],"description":"The unique ID of the tool search call generated by the model."},"execution":{"oneOf":[{"type":"null"},{"description":"Whether tool search was executed by the server or by the client.","type":"string","enum":["server","client"],"title":"ToolSearchExecutionType"}]},"id":{"type":["string","null"],"description":"The unique ID of this tool search output."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the tool search output.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]},"tools":{"type":"array","items":{"oneOf":[{"allOf":[{"description":"Defines a function in your own code the model can choose to call. Learn more about [function\ncalling](https://platform.openai.com/docs/guides/tools).","type":"object","required":["name"],"properties":{"defer_loading":{"type":["boolean","null"],"description":"Whether this function is deferred and loaded via tool search."},"description":{"type":["string","null"],"description":"A description of the function. Used by the model to determine whether or not to call the\nfunction."},"name":{"type":"string","description":"The name of the function to call."},"parameters":{"description":"A JSON schema object describing the parameters of the function."},"strict":{"type":["boolean","null"],"description":"Whether to enforce strict parameter validation. Default `true`."}},"title":"FunctionTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function"]}}}],"description":"Defines a function in your own code the model can choose to call. Learn more about [function\ncalling](https://platform.openai.com/docs/guides/tools)."},{"allOf":[{"description":"A tool that searches for relevant content from uploaded files. Learn more about the [file search\ntool](https://platform.openai.com/docs/guides/tools-file-search).","type":"object","required":["vector_store_ids"],"properties":{"filters":{"oneOf":[{"type":"null"},{"description":"A filter to apply.","oneOf":[{"description":"A filter used to compare a specified attribute key to a given value using a defined\ncomparison operation.","type":"object","required":["type","key","value"],"properties":{"key":{"type":"string","description":"The key to compare against the value."},"type":{"description":"Specifies the comparison operator: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`.\n- `eq`: equals\n- `ne`: not equal\n- `gt`: greater than\n- `gte`: greater than or equal\n- `lt`: less than\n- `lte`: less than or equal\n- `in`: in\n- `nin`: not in","type":"string","enum":["eq","ne","gt","gte","lt","lte","in","nin"],"title":"ComparisonType"},"value":{"description":"The value to compare against the attribute key; supports string, number, or boolean types."}},"title":"ComparisonFilter"},{"description":"Combine multiple filters using `and` or `or`.","type":"object","required":["type","filters"],"properties":{"filters":{"type":"array","items":{"oneOf":"circular()","description":"Filters for file search.","title":"Filter"},"description":"Array of filters to combine. Items can be ComparisonFilter or CompoundFilter."},"type":{"type":"string","enum":["and","or"],"description":"'Type of operation: `and` or `or`.'"}},"title":"CompoundFilter"}],"title":"Filter"}]},"max_num_results":{"type":["integer","null"],"format":"int32","description":"The maximum number of results to return. This number should be between 1 and 50 inclusive.","minimum":0},"ranking_options":{"oneOf":[{"type":"null"},{"description":"Ranking options for search.","type":"object","required":["ranker"],"properties":{"hybrid_search":{"oneOf":[{"type":"null"},{"description":"Weights that control how reciprocal rank fusion balances semantic embedding matches versus\nsparse keyword matches when hybrid search is enabled.","type":"object","required":["embedding_weight","text_weight"],"properties":{"embedding_weight":{"type":"number","format":"float","description":"The weight of the embedding in the reciprocal ranking fusion."},"text_weight":{"type":"number","format":"float","description":"The weight of the text in the reciprocal ranking fusion."}},"title":"HybridSearch"}]},"ranker":{"description":"The ranker to use for the file search.","type":"string","enum":["auto","default-2024-11-15"],"title":"RankVersionType"},"score_threshold":{"type":["number","null"],"format":"float","description":"The score threshold for the file search, a number between 0 and 1. Numbers closer to 1 will\nattempt to return only the most relevant results, but may return fewer results."}},"title":"RankingOptions"}]},"vector_store_ids":{"type":"array","items":{"type":"string"},"description":"The IDs of the vector stores to search."}},"title":"FileSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_search"]}}}],"description":"A tool that searches for relevant content from uploaded files. Learn more about the [file search\ntool](https://platform.openai.com/docs/guides/tools-file-search)."},{"allOf":[{"description":"A tool that controls a virtual computer. Learn more about the [computer\nuse tool](https://platform.openai.com/docs/guides/tools-computer-use).","type":"object","required":["environment","display_width","display_height"],"properties":{"display_height":{"type":"integer","format":"int32","description":"The height of the computer display.","minimum":0},"display_width":{"type":"integer","format":"int32","description":"The width of the computer display.","minimum":0},"environment":{"description":"The type of computer environment to control.","type":"string","enum":["windows","mac","linux","ubuntu","browser"],"title":"ComputerEnvironment"}},"title":"ComputerUsePreviewTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer_use_preview"]}}}],"description":"A tool that controls a virtual computer. Learn more about the [computer\nuse tool](https://platform.openai.com/docs/guides/tools-computer-use)."},{"allOf":[{"description":"Search the Internet for sources related to the prompt. Learn more about the\n[web search tool](https://platform.openai.com/docs/guides/tools-web-search).","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_content_types":{"type":["array","null"],"items":{"type":"string","description":"The type of content to search for.","enum":["text","image"],"title":"SearchContentType"},"description":"The types of content to search for."},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Defaults to `approximate` when omitted in JSON input.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search"]}}}],"description":"Search the Internet for sources related to the prompt. Learn more about the\n[web search tool](https://platform.openai.com/docs/guides/tools-web-search)."},{"allOf":[{"description":"type: web_search_2025_08_26","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_content_types":{"type":["array","null"],"items":{"type":"string","description":"The type of content to search for.","enum":["text","image"],"title":"SearchContentType"},"description":"The types of content to search for."},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Defaults to `approximate` when omitted in JSON input.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_2025_08_26"]}}}],"description":"type: web_search_2025_08_26"},{"allOf":[{"description":"Give the model access to additional tools via remote Model Context Protocol\n(MCP) servers. [Learn more about MCP](https://platform.openai.com/docs/guides/tools-remote-mcp).","type":"object","required":["server_label"],"properties":{"allowed_tools":{"oneOf":[{"type":"null"},{"description":"List of allowed tool names or a filter object.","oneOf":[{"type":"array","items":{"type":"string"},"description":"A string array of allowed tool names"},{"description":"A filter object to specify which tools are allowed.","type":"object","properties":{"read_only":{"type":["boolean","null"],"description":"Indicates whether or not a tool modifies data or is read-only.\nIf an MCP server is annotated with [readOnlyHint](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\nit will match this filter."},"tool_names":{"type":["array","null"],"items":{"type":"string"},"description":"List of allowed tool names."}},"title":"MCPToolFilter"}],"title":"MCPToolAllowedTools"}]},"authorization":{"type":["string","null"],"description":"An OAuth access token that can be used with a remote MCP server, either with a custom MCP\nserver URL or a service connector. Your application must handle the OAuth authorization\nflow and provide the token here."},"connector_id":{"oneOf":[{"type":"null"},{"description":"Identifier for service connectors, like those available in ChatGPT. One of `server_url` or\n`connector_id` must be provided. Learn more about service connectors [here](https://platform.openai.com/docs/guides/tools-remote-mcp#connectors).\n\nCurrently supported `connector_id` values are:\n- Dropbox: `connector_dropbox`\n- Gmail: `connector_gmail`\n- Google Calendar: `connector_googlecalendar`\n- Google Drive: `connector_googledrive`\n- Microsoft Teams: `connector_microsoftteams`\n- Outlook Calendar: `connector_outlookcalendar`\n- Outlook Email: `connector_outlookemail`\n- SharePoint: `connector_sharepoint`","type":"string","enum":["connector_dropbox","connector_gmail","connector_googlecalendar","connector_googledrive","connector_microsoftteams","connector_outlookcalendar","connector_outlookemail","connector_sharepoint"],"title":"McpToolConnectorId"}]},"defer_loading":{"type":["boolean","null"],"description":"Whether this MCP tool is deferred and discovered via tool search."},"headers":{"description":"Optional HTTP headers to send to the MCP server. Use for authentication or other purposes."},"require_approval":{"oneOf":[{"type":"null"},{"description":"Specify which of the MCP server's tools require approval.","oneOf":[{"description":"Specify which of the MCP server's tools require approval. Can be\n`always`, `never`, or a filter object associated with tools\nthat require approval.","type":"object","properties":{"always":{"oneOf":[{"type":"null"},{"description":"A list of tools that always require approval.","type":"object","properties":{"read_only":{"type":["boolean","null"],"description":"Indicates whether or not a tool modifies data or is read-only.\nIf an MCP server is annotated with [readOnlyHint](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\nit will match this filter."},"tool_names":{"type":["array","null"],"items":{"type":"string"},"description":"List of allowed tool names."}},"title":"MCPToolFilter"}]},"never":{"oneOf":[{"type":"null"},{"description":"A list of tools that never require approval.","type":"object","properties":{"read_only":{"type":["boolean","null"],"description":"Indicates whether or not a tool modifies data or is read-only.\nIf an MCP server is annotated with [readOnlyHint](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\nit will match this filter."},"tool_names":{"type":["array","null"],"items":{"type":"string"},"description":"List of allowed tool names."}},"title":"MCPToolFilter"}]}},"title":"MCPToolApprovalFilter"},{"description":"Specify a single approval policy for all tools. One of `always` or\n`never`. When set to `always`, all tools will require approval. When\nset to `never`, all tools will not require approval.","type":"string","enum":["always","never"],"title":"MCPToolApprovalSetting"}],"title":"MCPToolRequireApproval"}]},"server_description":{"type":["string","null"],"description":"Optional description of the MCP server, used to provide more context."},"server_label":{"type":"string","description":"A label for this MCP server, used to identify it in tool calls."},"server_url":{"type":["string","null"],"description":"The URL for the MCP server. One of `server_url` or `connector_id` must be provided."}},"title":"MCPTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp"]}}}],"description":"Give the model access to additional tools via remote Model Context Protocol\n(MCP) servers. [Learn more about MCP](https://platform.openai.com/docs/guides/tools-remote-mcp)."},{"allOf":[{"description":"A tool that runs Python code to help generate a response to a prompt.","type":"object","required":["container"],"properties":{"container":{"description":"The code interpreter container. Can be a container ID or an object that\nspecifies uploaded file IDs to make available to your code, along with an\noptional `memory_limit` setting.","oneOf":[{"allOf":[{"description":"Configuration for a code interpreter container. Optionally specify the IDs of the\nfiles to run the code on.","type":"object","properties":{"file_ids":{"type":["array","null"],"items":{"type":"string"},"description":"An optional list of uploaded files to make available to your code."},"memory_limit":{"type":["integer","null"],"format":"int64","minimum":0}},"title":"CodeInterpreterContainerAuto"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["auto"]}}}],"description":"Configuration for a code interpreter container. Optionally specify the IDs of the\nfiles to run the code on."},{"type":"object","description":"The container ID.","required":["type"],"properties":{"type":{"type":"string","enum":["container_i_d"]}}}],"title":"CodeInterpreterToolContainer"}},"title":"CodeInterpreterTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["code_interpreter"]}}}],"description":"A tool that runs Python code to help generate a response to a prompt."},{"allOf":[{"description":"A tool that generates images using a model like `gpt-image-1`.","type":"object","properties":{"action":{"oneOf":[{"type":"null"},{"description":"Whether to generate a new image or edit an existing image. Default: `auto`.","type":"string","enum":["generate","edit","auto"],"title":"ImageGenActionEnum"}]},"background":{"oneOf":[{"type":"null"},{"description":"Background type for the generated image. One of `transparent`,\n`opaque`, or `auto`. Default: `auto`.","type":"string","enum":["transparent","opaque","auto"],"title":"ImageGenToolBackground"}]},"input_fidelity":{"oneOf":[{"type":"null"},{"description":"Control how much effort the model will exert to match the style and features, especially facial features,\nof input images. This parameter is only supported for `gpt-image-1`. Unsupported\nfor `gpt-image-1-mini`. Supports `high` and `low`. Defaults to `low`.","type":"string","enum":["high","low"],"title":"InputFidelity"}]},"input_image_mask":{"oneOf":[{"type":"null"},{"description":"Optional mask for inpainting. Contains `image_url`\n(string, optional) and `file_id` (string, optional).","type":"object","properties":{"file_id":{"type":["string","null"],"description":"File ID for the mask image."},"image_url":{"type":["string","null"],"description":"Base64-encoded mask image."}},"title":"ImageGenToolInputImageMask"}]},"model":{"type":["string","null"],"description":"The image generation model to use. Default: `gpt-image-1`."},"moderation":{"oneOf":[{"type":"null"},{"description":"Moderation level for the generated image. Default: `auto`.","type":"string","enum":["auto","low"],"title":"ImageGenToolModeration"}]},"output_compression":{"type":["integer","null"],"format":"int32","description":"Compression level for the output image. Default: 100.","minimum":0},"output_format":{"oneOf":[{"type":"null"},{"description":"The output format of the generated image. One of `png`, `webp`, or\n`jpeg`. Default: `png`.","type":"string","enum":["png","webp","jpeg"],"title":"ImageGenToolOutputFormat"}]},"partial_images":{"type":["integer","null"],"format":"int32","description":"Number of partial images to generate in streaming mode, from 0 (default value) to 3.","minimum":0},"quality":{"oneOf":[{"type":"null"},{"description":"The quality of the generated image. One of `low`, `medium`, `high`,\nor `auto`. Default: `auto`.","type":"string","enum":["low","medium","high","auto"],"title":"ImageGenToolQuality"}]},"size":{"oneOf":[{"type":"null"},{"description":"The size of the generated images. For `gpt-image-2` and\n`gpt-image-2-2026-04-21`, arbitrary resolutions are supported as\n`WIDTHxHEIGHT` strings, for example `1536x864`. Width and height\nmust both be divisible by 16 and the requested aspect ratio must be\nbetween 1:3 and 3:1. Resolutions above `2560x1440` are experimental,\nand the maximum supported resolution is `3840x2160`. The requested\nsize must also satisfy the model's current pixel and edge limits.\nThe standard sizes `1024x1024`, `1536x1024`, and `1024x1536` are\nsupported by the GPT image models; `auto` is supported for models\nthat allow automatic sizing. For `dall-e-2`, use one of `256x256`,\n`512x512`, or `1024x1024`. For `dall-e-3`, use one of `1024x1024`,\n`1792x1024`, or `1024x1792`.","oneOf":[{"type":"string","enum":["auto"]},{"type":"string","enum":["1024x1024"]},{"type":"string","enum":["1024x1536"]},{"type":"string","enum":["1536x1024"]},{"type":"object","required":["other"],"properties":{"other":{"type":"string"}}}],"title":"ImageGenToolSize"}]}},"title":"ImageGenTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["image_generation"]}}}],"description":"A tool that generates images using a model like `gpt-image-1`."},{"type":"object","description":"A tool that allows the model to execute shell commands in a local environment.","required":["type"],"properties":{"type":{"type":"string","enum":["local_shell"]}}},{"allOf":[{"description":"A tool that allows the model to execute shell commands.","type":"object","properties":{"environment":{"oneOf":[{"type":"null"},{"description":"The execution environment for the shell tool.","oneOf":[{"allOf":[{"description":"Automatically creates a container for this request.","type":"object","properties":{"file_ids":{"type":["array","null"],"items":{"type":"string"},"description":"An optional list of uploaded file IDs to make available in the container."},"network_policy":{"oneOf":[{"type":"null"},{"description":"Network access policy for the container.","oneOf":[{"type":"object","description":"Disable all outbound network access.","required":["type"],"properties":{"type":{"type":"string","enum":["disabled"]}}},{"allOf":[{"description":"Allow access only to specified domains.","type":"object","required":["allowed_domains"],"properties":{"allowed_domains":{"type":"array","items":{"type":"string"},"description":"A list of allowed domains."},"domain_secrets":{"type":["array","null"],"items":{"type":"object","description":"A domain-scoped secret injected for allowlisted domains.","required":["domain","name","value"],"properties":{"domain":{"type":"string","description":"The domain associated with the secret."},"name":{"type":"string","description":"The name of the secret to inject for the domain."},"value":{"type":"string","description":"The secret value to inject for the domain."}},"title":"ContainerNetworkPolicyDomainSecretParam"},"description":"Optional domain-scoped secrets for allowlisted domains."}},"title":"ContainerNetworkPolicyAllowlistDetails"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["allowlist"]}}}],"description":"Allow access only to specified domains."}],"title":"ContainerNetworkPolicy"}]},"skills":{"type":["array","null"],"items":{"oneOf":[{"allOf":[{"description":"Reference a skill by ID.","type":"object","required":["skill_id"],"properties":{"skill_id":{"type":"string","description":"The ID of the skill to reference."},"version":{"type":["string","null"],"description":"An optional specific version to use."}},"title":"SkillReferenceParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["skill_reference"]}}}],"description":"Reference a skill by ID."},{"allOf":[{"description":"Provide an inline skill definition.","type":"object","required":["name","description","source"],"properties":{"description":{"type":"string","description":"The description of the skill."},"name":{"type":"string","description":"The name of the skill."},"source":{"description":"The inline source for the skill.","type":"object","required":["media_type","data"],"properties":{"data":{"type":"string","description":"The base64-encoded skill data."},"media_type":{"type":"string","description":"The media type. Always `\"application/zip\"`."}},"title":"InlineSkillSourceParam"}},"title":"InlineSkillParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["inline"]}}}],"description":"Provide an inline skill definition."}],"description":"A skill parameter — either a reference or inline definition.","title":"SkillParam"},"description":"An optional list of skills to make available in the container."}},"title":"ContainerAutoParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["container_auto"]}}}],"description":"Automatically creates a container for this request."},{"allOf":[{"description":"Use a local computer environment.","type":"object","properties":{"skills":{"type":["array","null"],"items":{"type":"object","description":"A local skill available in a local environment.","required":["name","description","path"],"properties":{"description":{"type":"string","description":"The description of the skill."},"name":{"type":"string","description":"The name of the skill."},"path":{"type":"string","description":"The path to the directory containing the skill."}},"title":"LocalSkillParam"},"description":"An optional list of local skills."}},"title":"LocalEnvironmentParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["local"]}}}],"description":"Use a local computer environment."},{"allOf":[{"description":"Reference an existing container by ID.","type":"object","required":["container_id"],"properties":{"container_id":{"type":"string","description":"The ID of the referenced container."}},"title":"ContainerReferenceParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["container_reference"]}}}],"description":"Reference an existing container by ID."}],"title":"FunctionShellEnvironment"}]}},"title":"FunctionShellToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["shell"]}}}],"description":"A tool that allows the model to execute shell commands."},{"allOf":[{"description":"A custom tool that processes input using a specified format. Learn more about [custom\ntools](https://platform.openai.com/docs/guides/function-calling#custom-tools)","type":"object","required":["name","format"],"properties":{"defer_loading":{"type":["boolean","null"],"description":"Whether this tool should be deferred and discovered via tool search."},"description":{"type":["string","null"],"description":"Optional description of the custom tool, used to provide more context."},"format":{"description":"The input format for the custom tool. Default is unconstrained text.","oneOf":[{"type":"object","description":"Unconstrained free-form text.","required":["type"],"properties":{"type":{"type":"string","enum":["text"]}}},{"allOf":[{"description":"A grammar defined by the user.","type":"object","required":["definition","syntax"],"properties":{"definition":{"type":"string","description":"The grammar definition."},"syntax":{"description":"The syntax of the grammar definition. One of `lark` or `regex`.","type":"string","enum":["lark","regex"],"title":"GrammarSyntax"}},"title":"CustomGrammarFormatParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["grammar"]}}}],"description":"A grammar defined by the user."}],"title":"CustomToolParamFormat"},"name":{"type":"string","description":"The name of the custom tool, used to identify it in tool calls."}},"title":"CustomToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom"]}}}],"description":"A custom tool that processes input using a specified format. Learn more about [custom\ntools](https://platform.openai.com/docs/guides/function-calling#custom-tools)"},{"allOf":[{"description":"A tool that controls a virtual computer. Learn more about the\n[computer tool](https://platform.openai.com/docs/guides/tools-computer-use).","type":"object","title":"ComputerTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer"]}}}],"description":"A tool that controls a virtual computer. Learn more about the\n[computer tool](https://platform.openai.com/docs/guides/tools-computer-use)."},{"allOf":[{"description":"Groups function/custom tools under a shared namespace.","type":"object","required":["name","description","tools"],"properties":{"description":{"type":"string","description":"A description of the namespace shown to the model."},"name":{"type":"string","description":"The namespace name used in tool calls (for example, `crm`)."},"tools":{"type":"array","items":{"oneOf":[{"allOf":[{"type":"object","description":"A function tool that can be used within a namespace or with tool search.","required":["name"],"properties":{"defer_loading":{"type":["boolean","null"],"description":"Whether this function should be deferred and discovered via tool search."},"description":{"type":["string","null"],"description":"A description of the function."},"name":{"type":"string","description":"The name of the function."},"parameters":{"description":"A JSON schema object describing the parameters of the function."},"strict":{"type":["boolean","null"],"description":"Whether to enforce strict parameter validation."}},"title":"FunctionToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function"]}}}]},{"allOf":[{"type":"object","required":["name","format"],"properties":{"defer_loading":{"type":["boolean","null"],"description":"Whether this tool should be deferred and discovered via tool search."},"description":{"type":["string","null"],"description":"Optional description of the custom tool, used to provide more context."},"format":{"description":"The input format for the custom tool. Default is unconstrained text.","oneOf":[{"type":"object","description":"Unconstrained free-form text.","required":["type"],"properties":{"type":{"type":"string","enum":["text"]}}},{"allOf":[{"description":"A grammar defined by the user.","type":"object","required":["definition","syntax"],"properties":{"definition":{"type":"string","description":"The grammar definition."},"syntax":{"description":"The syntax of the grammar definition. One of `lark` or `regex`.","type":"string","enum":["lark","regex"],"title":"GrammarSyntax"}},"title":"CustomGrammarFormatParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["grammar"]}}}],"description":"A grammar defined by the user."}],"title":"CustomToolParamFormat"},"name":{"type":"string","description":"The name of the custom tool, used to identify it in tool calls."}},"title":"CustomToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom"]}}}]}],"description":"A function or custom tool that belongs to a namespace.","title":"NamespaceToolParamTool"},"description":"The function/custom tools available inside this namespace."}},"title":"NamespaceToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["namespace"]}}}],"description":"Groups function/custom tools under a shared namespace."},{"allOf":[{"description":"Hosted or BYOT tool search configuration for deferred tools.","type":"object","properties":{"description":{"type":["string","null"],"description":"Description shown to the model for a client-executed tool search tool."},"execution":{"oneOf":[{"type":"null"},{"description":"Whether tool search is executed by the server or by the client.","type":"string","enum":["server","client"],"title":"ToolSearchExecutionType"}]},"parameters":{"description":"Parameter schema for a client-executed tool search tool."}},"title":"ToolSearchToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["tool_search"]}}}],"description":"Hosted or BYOT tool search configuration for deferred tools."},{"allOf":[{"description":" This tool searches the web for relevant results to use in a response. Learn more about the [web search\ntool](https://platform.openai.com/docs/guides/tools-web-search).","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_content_types":{"type":["array","null"],"items":{"type":"string","description":"The type of content to search for.","enum":["text","image"],"title":"SearchContentType"},"description":"The types of content to search for."},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Defaults to `approximate` when omitted in JSON input.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_preview"]}}}],"description":" This tool searches the web for relevant results to use in a response. Learn more about the [web search\ntool](https://platform.openai.com/docs/guides/tools-web-search)."},{"allOf":[{"description":"type: web_search_preview_2025_03_11","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_content_types":{"type":["array","null"],"items":{"type":"string","description":"The type of content to search for.","enum":["text","image"],"title":"SearchContentType"},"description":"The types of content to search for."},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Defaults to `approximate` when omitted in JSON input.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_preview_2025_03_11"]}}}],"description":"type: web_search_preview_2025_03_11"},{"type":"object","description":"Allows the assistant to create, delete, or update files using unified diffs.","required":["type"],"properties":{"type":{"type":"string","enum":["apply_patch"]}}}],"description":"Definitions for model-callable tools.","title":"Tool"},"description":"The loaded tool definitions returned by the tool search output."}},"title":"ToolSearchOutputItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["tool_search_output"]}}}],"description":"A tool search output."},{"allOf":[{"description":"A description of the chain of thought used by a reasoning model while generating\na response. Be sure to include these items in your `input` to the Responses API\nfor subsequent turns of a conversation if you are manually\n[managing context](https://platform.openai.com/docs/guides/conversation-state).","type":"object","required":["summary"],"properties":{"content":{"type":["array","null"],"items":{"oneOf":[{"allOf":[{"type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The reasoning text from the model."}},"title":"ReasoningTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["reasoning_text"]}}}]}],"description":"[ReasoningTextContent] used elsewhere which adds type,\nbut here in [ReasoningItem] content field we need type too hence an enum:","title":"ReasoningItemContent"},"description":"Reasoning text content."},"encrypted_content":{"type":["string","null"],"description":"The encrypted content of the reasoning item - populated when a response is generated with\n`reasoning.encrypted_content` in the `include` parameter."},"id":{"type":["string","null"],"description":"Unique identifier of the reasoning content."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]},"summary":{"type":"array","items":{"oneOf":[{"allOf":[{"type":"object","required":["text"],"properties":{"text":{"type":"string","description":"A summary of the reasoning output from the model so far."}},"title":"SummaryTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["summary_text"]}}}]}],"title":"SummaryPart"},"description":"Reasoning summary content."}},"title":"ReasoningItem"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["reasoning"]}}}],"description":"A description of the chain of thought used by a reasoning model while generating\na response. Be sure to include these items in your `input` to the Responses API\nfor subsequent turns of a conversation if you are manually\n[managing context](https://platform.openai.com/docs/guides/conversation-state)."},{"allOf":[{"description":"A compaction item generated by the [`v1/responses/compact` API](https://platform.openai.com/docs/api-reference/responses/compact).","type":"object","required":["encrypted_content"],"properties":{"encrypted_content":{"type":"string","description":"The encrypted content of the compaction summary."},"id":{"type":["string","null"],"description":"The ID of the compaction item."}},"title":"CompactionSummaryItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["compaction"]}}}],"description":"A compaction item generated by the [`v1/responses/compact` API](https://platform.openai.com/docs/api-reference/responses/compact)."},{"allOf":[{"description":"An image generation request made by the model.","type":"object","required":["id","status"],"properties":{"id":{"type":"string","description":"The unique ID of the image generation call."},"result":{"type":["string","null"],"description":"The generated image encoded in base64."},"status":{"description":"The status of the image generation call.","type":"string","enum":["in_progress","completed","generating","failed"],"title":"ImageGenToolCallStatus"}},"title":"ImageGenToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["image_generation_call"]}}}],"description":"An image generation request made by the model."},{"allOf":[{"description":"A tool call to run code.","type":"object","required":["container_id","id","status"],"properties":{"code":{"type":["string","null"],"description":"The code to run, or null if not available."},"container_id":{"type":"string","description":"ID of the container used to run the code."},"id":{"type":"string","description":"The unique ID of the code interpreter tool call."},"outputs":{"type":["array","null"],"items":{"oneOf":[{"allOf":[{"description":"Code interpreter output logs","type":"object","required":["logs"],"properties":{"logs":{"type":"string","description":"The logs output from the code interpreter."}},"title":"CodeInterpreterOutputLogs"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["logs"]}}}],"description":"Code interpreter output logs"},{"allOf":[{"description":"Code interpreter output image","type":"object","required":["url"],"properties":{"url":{"type":"string","description":"The URL of the image output from the code interpreter."}},"title":"CodeInterpreterOutputImage"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["image"]}}}],"description":"Code interpreter output image"}],"description":"Individual result from a code interpreter: either logs or files.","title":"CodeInterpreterToolCallOutput"},"description":"The outputs generated by the code interpreter, such as logs or images.\nCan be null if no outputs are available."},"status":{"description":"The status of the code interpreter tool call.\nValid values are `in_progress`, `completed`, `incomplete`, `interpreting`, and `failed`.","type":"string","enum":["in_progress","completed","incomplete","interpreting","failed"],"title":"CodeInterpreterToolCallStatus"}},"title":"CodeInterpreterToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["code_interpreter_call"]}}}],"description":"A tool call to run code."},{"allOf":[{"description":"A tool call to run a command on the local shell.","type":"object","required":["action","call_id","id","status"],"properties":{"action":{"description":"Execute a shell command on the server.","type":"object","required":["command","env"],"properties":{"command":{"type":"array","items":{"type":"string"},"description":"The command to run."},"env":{"type":"object","description":"Environment variables to set for the command.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"timeout_ms":{"type":["integer","null"],"format":"int64","description":"Optional timeout in milliseconds for the command.","minimum":0},"user":{"type":["string","null"],"description":"Optional user to run the command as."},"working_directory":{"type":["string","null"],"description":"Optional working directory to run the command in."}},"title":"LocalShellExecAction"},"call_id":{"type":"string","description":"The unique ID of the local shell tool call generated by the model."},"id":{"type":"string","description":"The unique ID of the local shell call."},"status":{"description":"The status of the local shell call.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}},"title":"LocalShellToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["local_shell_call"]}}}],"description":"A tool call to run a command on the local shell."},{"allOf":[{"description":"The output of a local shell tool call.","type":"object","required":["id","output"],"properties":{"id":{"type":"string","description":"The unique ID of the local shell tool call generated by the model."},"output":{"type":"string","description":"A JSON string of the output of the local shell tool call."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]}},"title":"LocalShellToolCallOutput"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["local_shell_call_output"]}}}],"description":"The output of a local shell tool call."},{"allOf":[{"description":"A tool representing a request to execute one or more shell commands.","type":"object","required":["call_id","action"],"properties":{"action":{"description":"The shell commands and limits that describe how to run the tool call.","type":"object","required":["commands"],"properties":{"commands":{"type":"array","items":{"type":"string"},"description":"Ordered shell commands for the execution environment to run."},"max_output_length":{"type":["integer","null"],"format":"int64","description":"Maximum number of UTF-8 characters to capture from combined stdout and stderr output.","minimum":0},"timeout_ms":{"type":["integer","null"],"format":"int64","description":"Maximum wall-clock time in milliseconds to allow the shell commands to run.","minimum":0}},"title":"FunctionShellActionParam"},"call_id":{"type":"string","description":"The unique ID of the shell tool call generated by the model."},"environment":{"oneOf":[{"type":"null"},{"description":"The environment to execute the shell commands in.","oneOf":[{"allOf":[{"description":"Use a local computer environment.","type":"object","properties":{"skills":{"type":["array","null"],"items":{"type":"object","description":"A local skill available in a local environment.","required":["name","description","path"],"properties":{"description":{"type":"string","description":"The description of the skill."},"name":{"type":"string","description":"The name of the skill."},"path":{"type":"string","description":"The path to the directory containing the skill."}},"title":"LocalSkillParam"},"description":"An optional list of local skills."}},"title":"LocalEnvironmentParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["local"]}}}],"description":"Use a local computer environment."},{"allOf":[{"description":"Reference an existing container by ID.","type":"object","required":["container_id"],"properties":{"container_id":{"type":"string","description":"The ID of the referenced container."}},"title":"ContainerReferenceParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["container_reference"]}}}],"description":"Reference an existing container by ID."}],"title":"FunctionShellCallItemEnvironment"}]},"id":{"type":["string","null"],"description":"The unique ID of the shell tool call. Populated when this item is returned via API."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the shell call. One of `in_progress`, `completed`, or `incomplete`.","type":"string","enum":["in_progress","completed","incomplete"],"title":"FunctionShellCallItemStatus"}]}},"title":"FunctionShellCallItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["shell_call"]}}}],"description":"A tool representing a request to execute one or more shell commands."},{"allOf":[{"description":"The streamed output items emitted by a shell tool call.","type":"object","required":["call_id","output"],"properties":{"call_id":{"type":"string","description":"The unique ID of the shell tool call generated by the model."},"id":{"type":["string","null"],"description":"The unique ID of the shell tool call output. Populated when this item is returned via API."},"max_output_length":{"type":["integer","null"],"format":"int64","description":"The maximum number of UTF-8 characters captured for this shell call's combined output.","minimum":0},"output":{"type":"array","items":{"type":"object","description":"Captured stdout and stderr for a portion of a shell tool call output.","required":["stdout","stderr","outcome"],"properties":{"outcome":{"description":"The exit or timeout outcome associated with this chunk.","oneOf":[{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["timeout"]}}},{"allOf":[{"type":"object","description":"Indicates that the shell commands finished and returned an exit code.","required":["exit_code"],"properties":{"exit_code":{"type":"integer","format":"int32","description":"The exit code returned by the shell process."}},"title":"FunctionShellCallOutputExitOutcomeParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["exit"]}}}]}],"title":"FunctionShellCallOutputOutcomeParam"},"stderr":{"type":"string","description":"Captured stderr output for this chunk of the shell call."},"stdout":{"type":"string","description":"Captured stdout output for this chunk of the shell call."}},"title":"FunctionShellCallOutputContentParam"},"description":"Captured chunks of stdout and stderr output, along with their associated outcomes."}},"title":"FunctionShellCallOutputItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["shell_call_output"]}}}],"description":"The streamed output items emitted by a shell tool call."},{"allOf":[{"description":"A tool call representing a request to create, delete, or update files using diff patches.","type":"object","required":["call_id","status","operation"],"properties":{"call_id":{"type":"string","description":"The unique ID of the apply patch tool call generated by the model."},"id":{"type":["string","null"],"description":"The unique ID of the apply patch tool call. Populated when this item is returned via API."},"operation":{"description":"The specific create, delete, or update instruction for the apply_patch tool call.","oneOf":[{"allOf":[{"type":"object","description":"Instruction for creating a new file via the apply_patch tool.","required":["path","diff"],"properties":{"diff":{"type":"string","description":"Unified diff content to apply when creating the file."},"path":{"type":"string","description":"Path of the file to create relative to the workspace root."}},"title":"ApplyPatchCreateFileOperationParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["create_file"]}}}]},{"allOf":[{"type":"object","description":"Instruction for deleting an existing file via the apply_patch tool.","required":["path"],"properties":{"path":{"type":"string","description":"Path of the file to delete relative to the workspace root."}},"title":"ApplyPatchDeleteFileOperationParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["delete_file"]}}}]},{"allOf":[{"type":"object","description":"Instruction for updating an existing file via the apply_patch tool.","required":["path","diff"],"properties":{"diff":{"type":"string","description":"Unified diff content to apply to the existing file."},"path":{"type":"string","description":"Path of the file to update relative to the workspace root."}},"title":"ApplyPatchUpdateFileOperationParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["update_file"]}}}]}],"title":"ApplyPatchOperationParam"},"status":{"description":"The status of the apply patch tool call. One of `in_progress` or `completed`.","type":"string","enum":["in_progress","completed"],"title":"ApplyPatchCallStatusParam"}},"title":"ApplyPatchToolCallItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["apply_patch_call"]}}}],"description":"A tool call representing a request to create, delete, or update files using diff patches."},{"allOf":[{"description":"The streamed output emitted by an apply patch tool call.","type":"object","required":["call_id","status"],"properties":{"call_id":{"type":"string","description":"The unique ID of the apply patch tool call generated by the model."},"id":{"type":["string","null"],"description":"The unique ID of the apply patch tool call output. Populated when this item is returned via API."},"output":{"type":["string","null"],"description":"Optional human-readable log text from the apply patch tool (e.g., patch results or errors)."},"status":{"description":"The status of the apply patch tool call output. One of `completed` or `failed`.","type":"string","enum":["completed","failed"],"title":"ApplyPatchCallOutputStatusParam"}},"title":"ApplyPatchToolCallOutputItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["apply_patch_call_output"]}}}],"description":"The streamed output emitted by an apply patch tool call."},{"allOf":[{"description":"A list of tools available on an MCP server.","type":"object","required":["id","server_label","tools"],"properties":{"error":{"type":["string","null"],"description":"Error message if listing failed."},"id":{"type":"string","description":"The unique ID of the list."},"server_label":{"type":"string","description":"The label of the MCP server."},"tools":{"type":"array","items":{"type":"object","required":["input_schema","name"],"properties":{"annotations":{"description":"Additional annotations about the tool."},"description":{"type":["string","null"],"description":"The description of the tool."},"input_schema":{"description":"The JSON schema describing the tool's input."},"name":{"type":"string","description":"The name of the tool."}},"title":"MCPListToolsTool"},"description":"The tools available on the server."}},"title":"MCPListTools"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp_list_tools"]}}}],"description":"A list of tools available on an MCP server."},{"allOf":[{"description":"A request for human approval of a tool invocation.","type":"object","required":["arguments","id","name","server_label"],"properties":{"arguments":{"type":"string","description":"JSON string of arguments for the tool."},"id":{"type":"string","description":"The unique ID of the approval request."},"name":{"type":"string","description":"The name of the tool to run."},"server_label":{"type":"string","description":"The label of the MCP server making the request."}},"title":"MCPApprovalRequest"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp_approval_request"]}}}],"description":"A request for human approval of a tool invocation."},{"allOf":[{"description":"A response to an MCP approval request.","type":"object","required":["approval_request_id","approve"],"properties":{"approval_request_id":{"type":"string","description":"The ID of the approval request being answered."},"approve":{"type":"boolean","description":"Whether the request was approved."},"id":{"type":["string","null"],"description":"The unique ID of the approval response"},"reason":{"type":["string","null"],"description":"Optional reason for the decision."}},"title":"MCPApprovalResponse"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp_approval_response"]}}}],"description":"A response to an MCP approval request."},{"allOf":[{"description":"An invocation of a tool on an MCP server.","type":"object","required":["arguments","id","name","server_label"],"properties":{"approval_request_id":{"type":["string","null"],"description":"Unique identifier for the MCP tool call approval request. Include this value\nin a subsequent `mcp_approval_response` input to approve or reject the corresponding\ntool call."},"arguments":{"type":"string","description":"A JSON string of the arguments passed to the tool."},"error":{"type":["string","null"],"description":"Error message from the call, if any."},"id":{"type":"string","description":"The unique ID of the tool call."},"name":{"type":"string","description":"The name of the tool that was run."},"output":{"type":["string","null"],"description":"The output from the tool call."},"server_label":{"type":"string","description":"The label of the MCP server running the tool."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the tool call. One of `in_progress`, `completed`, `incomplete`,\n`calling`, or `failed`.","type":"string","enum":["in_progress","completed","incomplete","calling","failed"],"title":"MCPToolCallStatus"}]}},"title":"MCPToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp_call"]}}}],"description":"An invocation of a tool on an MCP server."},{"allOf":[{"description":"The output of a custom tool call from your code, being sent back to the model.","type":"object","required":["call_id","output"],"properties":{"call_id":{"type":"string","description":"The call ID, used to map this custom tool call output to a custom tool call."},"id":{"type":["string","null"],"description":"The unique ID of the custom tool call output in the OpenAI platform."},"output":{"description":"The output from the custom tool call generated by your code.\nCan be a string or an list of output content.","oneOf":[{"type":"string","description":"A string of the output of the custom tool call."},{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A text input to the model.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text input to the model."}},"title":"InputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_text"]}}}],"description":"A text input to the model."},{"allOf":[{"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision).","type":"object","properties":{"detail":{"description":"The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`.\nDefaults to `auto` when omitted in JSON input.","type":"string","enum":["auto","low","high","original"],"title":"ImageDetail"},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"image_url":{"type":["string","null"],"description":"The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image\nin a data URL."}},"title":"InputImageContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_image"]}}}],"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision)."},{"allOf":[{"description":"A file input to the model.","type":"object","properties":{"detail":{"oneOf":[{"type":"null"},{"description":"The detail level of the file to be sent to the model. Use `low` for the default rendering\nbehavior, or `high` to render the file at higher quality. Defaults to `low`.","type":"string","enum":["low","high"],"title":"FileInputDetail"}]},"file_data":{"type":["string","null"],"description":"The content of the file to be sent to the model."},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"file_url":{"type":["string","null"],"description":"The URL of the file to be sent to the model."},"filename":{"type":["string","null"],"description":"The name of the file to be sent to the model."}},"title":"InputFileContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_file"]}}}],"description":"A file input to the model."}],"description":"Parts of a message: text, image, file, or audio.","title":"InputContent"},"description":"Text, image, or file output of the custom tool call."}],"title":"CustomToolCallOutputOutput"}},"title":"CustomToolCallOutput"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom_tool_call_output"]}}}],"description":"The output of a custom tool call from your code, being sent back to the model."},{"allOf":[{"description":"A call to a custom tool created by the model.","type":"object","required":["call_id","input","name","id"],"properties":{"call_id":{"type":"string","description":"An identifier used to map this custom tool call to a tool call output."},"id":{"type":"string","description":"The unique ID of the custom tool call in the OpenAI platform."},"input":{"type":"string","description":"The input for the custom tool call generated by the model."},"name":{"type":"string","description":"The name of the custom tool being called."},"namespace":{"type":["string","null"],"description":"The namespace of the custom tool being called."}},"title":"CustomToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom_tool_call"]}}}],"description":"A call to a custom tool created by the model."}],"title":"Item"},{"description":"A simple, user-friendly message input (EasyInputMessage).\nSupports string content and can include assistant role for previous responses.\nMust be tried last as it's the most flexible structure.\n\nA message input to the model with a role indicating instruction following\nhierarchy. Instructions given with the `developer` or `system` role take\nprecedence over instructions given with the `user` role. Messages with the\n`assistant` role are presumed to have been generated by the model in previous\ninteractions.","type":"object","required":["type","role","content"],"properties":{"content":{"description":"Text, image, or audio input to the model, used to generate a response.\nCan also contain previous assistant responses.","oneOf":[{"type":"string","description":"A text input to the model."},{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A text input to the model.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text input to the model."}},"title":"InputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_text"]}}}],"description":"A text input to the model."},{"allOf":[{"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision).","type":"object","properties":{"detail":{"description":"The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`.\nDefaults to `auto` when omitted in JSON input.","type":"string","enum":["auto","low","high","original"],"title":"ImageDetail"},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"image_url":{"type":["string","null"],"description":"The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image\nin a data URL."}},"title":"InputImageContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_image"]}}}],"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision)."},{"allOf":[{"description":"A file input to the model.","type":"object","properties":{"detail":{"oneOf":[{"type":"null"},{"description":"The detail level of the file to be sent to the model. Use `low` for the default rendering\nbehavior, or `high` to render the file at higher quality. Defaults to `low`.","type":"string","enum":["low","high"],"title":"FileInputDetail"}]},"file_data":{"type":["string","null"],"description":"The content of the file to be sent to the model."},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"file_url":{"type":["string","null"],"description":"The URL of the file to be sent to the model."},"filename":{"type":["string","null"],"description":"The name of the file to be sent to the model."}},"title":"InputFileContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_file"]}}}],"description":"A file input to the model."}],"description":"Parts of a message: text, image, file, or audio.","title":"InputContent"},"description":"A list of one or many input items to the model, containing different content types."}],"title":"EasyInputContent"},"phase":{"oneOf":[{"type":"null"},{"description":"Labels an `assistant` message as intermediate commentary (`commentary`) or\nthe final answer (`final_answer`). Not used for user messages.","type":"string","enum":["commentary","final_answer"],"title":"MessagePhase"}]},"role":{"description":"The role of the message input. One of `user`, `assistant`, `system`, or `developer`.","type":"string","enum":["user","assistant","system","developer"],"title":"Role"},"type":{"description":"The type of the message input. Defaults to `message` when omitted in JSON input.","type":"string","enum":["message"],"title":"MessageType"}},"title":"EasyInputMessage"}],"description":"Input item that can be used in the context for generating a response.\n\nThis represents the OpenAPI `InputItem` schema which is an `anyOf`:\n1. `EasyInputMessage` - Simple, user-friendly message input (can use string content)\n2. `Item` - Structured items with proper type discrimination (including InputMessage, OutputMessage, tool calls)\n3. `ItemReferenceParam` - Reference to an existing item by ID (type can be null)\n\nUses untagged deserialization because these types overlap in structure.\nOrder matters: more specific structures are tried first.\n\n# OpenAPI Specification\nCorresponds to the `InputItem` schema: `anyOf[EasyInputMessage, Item, ItemReferenceParam]`","title":"InputItem"},"description":"A list of one or many input items to the model, containing\ndifferent content types."}],"title":"InputParam"},"instructions":{"type":["string","null"],"description":"A system (or developer) message inserted into the model's context.\n\nWhen using along with `previous_response_id`, the instructions from a previous\nresponse will not be carried over to the next response. This makes it simple\nto swap out system (or developer) messages in new responses."},"max_output_tokens":{"type":["integer","null"],"format":"int32","description":"An upper bound for the number of tokens that can be generated for a response, including\nvisible output tokens and [reasoning tokens](https://platform.openai.com/docs/guides/reasoning).","minimum":0},"max_tool_calls":{"type":["integer","null"],"format":"int32","description":"The maximum number of total calls to built-in tools that can be processed in a response. This\nmaximum number applies across all built-in tool calls, not per individual tool. Any further\nattempts to call a tool by the model will be ignored.","minimum":0},"metadata":{"type":["object","null"],"description":"Set of 16 key-value pairs that can be attached to an object. This can be\nuseful for storing additional information about the object in a structured\nformat, and querying for objects via API or the dashboard.\n\nKeys are strings with a maximum length of 64 characters. Values are\nstrings with a maximum length of 512 characters.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"model":{"type":["string","null"],"description":"Model ID used to generate the response, like `gpt-4o` or `o3`. OpenAI\noffers a wide range of models with different capabilities, performance\ncharacteristics, and price points. Refer to the [model guide](https://platform.openai.com/docs/models)\nto browse and compare available models."},"parallel_tool_calls":{"type":["boolean","null"],"description":"Whether to allow the model to run tool calls in parallel."},"previous_response_id":{"type":["string","null"],"description":"The unique ID of the previous response to the model. Use this to create multi-turn conversations.\nLearn more about [conversation state](https://platform.openai.com/docs/guides/conversation-state).\nCannot be used in conjunction with `conversation`."},"prompt":{"oneOf":[{"type":"null"},{"description":"Reference to a prompt template and its variables.\n[Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts).","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The unique identifier of the prompt template to use."},"variables":{"oneOf":[{"type":"null"},{"description":"Optional map of values to substitute in for variables in your\nprompt. The substitution values can either be strings, or other\nResponse input types like images or files.","oneOf":[{"type":"string"},{"oneOf":[{"allOf":[{"description":"A text input to the model.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text input to the model."}},"title":"InputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_text"]}}}],"description":"A text input to the model."},{"allOf":[{"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision).","type":"object","properties":{"detail":{"description":"The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`.\nDefaults to `auto` when omitted in JSON input.","type":"string","enum":["auto","low","high","original"],"title":"ImageDetail"},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"image_url":{"type":["string","null"],"description":"The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image\nin a data URL."}},"title":"InputImageContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_image"]}}}],"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision)."},{"allOf":[{"description":"A file input to the model.","type":"object","properties":{"detail":{"oneOf":[{"type":"null"},{"description":"The detail level of the file to be sent to the model. Use `low` for the default rendering\nbehavior, or `high` to render the file at higher quality. Defaults to `low`.","type":"string","enum":["low","high"],"title":"FileInputDetail"}]},"file_data":{"type":["string","null"],"description":"The content of the file to be sent to the model."},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"file_url":{"type":["string","null"],"description":"The URL of the file to be sent to the model."},"filename":{"type":["string","null"],"description":"The name of the file to be sent to the model."}},"title":"InputFileContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_file"]}}}],"description":"A file input to the model."}],"description":"Parts of a message: text, image, file, or audio.","title":"InputContent"},{}],"title":"ResponsePromptVariables"}]},"version":{"type":["string","null"],"description":"Optional version of the prompt template."}},"title":"Prompt"}]},"prompt_cache_key":{"type":["string","null"],"description":"Used by OpenAI to cache responses for similar requests to optimize your cache hit rates. Replaces\nthe `user` field. [Learn more](https://platform.openai.com/docs/guides/prompt-caching)."},"prompt_cache_retention":{"oneOf":[{"type":"null"},{"description":"The retention policy for the prompt cache. Set to `24h` to enable extended prompt caching,\nwhich keeps cached prefixes active for longer, up to a maximum of 24 hours. [Learn\nmore](https://platform.openai.com/docs/guides/prompt-caching#prompt-cache-retention).","type":"string","enum":["in-memory","24h"],"title":"PromptCacheRetention"}]},"reasoning":{"oneOf":[{"type":"null"},{"description":"**gpt-5 and o-series models only**\nConfiguration options for [reasoning models](https://platform.openai.com/docs/guides/reasoning).","type":"object","properties":{"effort":{"oneOf":[{"type":"null"},{"description":"Constrains effort on reasoning for\n[reasoning models](https://platform.openai.com/docs/guides/reasoning).\nCurrently supported values are `minimal`, `low`, `medium`, and `high`. Reducing\nreasoning effort can result in faster responses and fewer tokens used\non reasoning in a response.\n\nNote: The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort.","type":"string","enum":["none","minimal","low","medium","high","xhigh"],"title":"ReasoningEffort"}]},"summary":{"oneOf":[{"type":"null"},{"description":"A summary of the reasoning performed by the model. This can be\nuseful for debugging and understanding the model's reasoning process.\nOne of `auto`, `concise`, or `detailed`.\n\n`concise` is supported for `computer-use-preview` models and all reasoning models after\n`gpt-5`.","type":"string","enum":["auto","concise","detailed"],"title":"ReasoningSummary"}]}},"title":"Reasoning"}]},"safety_identifier":{"type":["string","null"],"description":"A stable identifier used to help detect users of your application that may be violating OpenAI's\nusage policies.\n\nThe IDs should be a string that uniquely identifies each user. We recommend hashing their username\nor email address, in order to avoid sending us any identifying information. [Learn\nmore](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers)."},"service_tier":{"oneOf":[{"type":"null"},{"description":"Specifies the processing type used for serving the request.\n- If set to 'auto', then the request will be processed with the service tier configured in the Project settings. Unless otherwise configured, the Project will use 'default'.\n- If set to 'default', then the request will be processed with the standard pricing and performance for the selected model.\n- If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or '[priority](https://openai.com/api-priority-processing/)', then the request will be processed with the corresponding service tier.\n- When not set, the default behavior is 'auto'.\n\nWhen the `service_tier` parameter is set, the response body will include the `service_tier` value based on the processing mode actually used to serve the request. This response value may be different from the value set in the parameter.","type":"string","enum":["auto","default","flex","scale","priority"],"title":"ServiceTier"}]},"store":{"type":["boolean","null"],"description":"Whether to store the generated model response for later retrieval via API."},"stream":{"type":["boolean","null"],"description":"If set to true, the model response data will be streamed to the client\nas it is generated using [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format).\nSee the [Streaming section below](https://platform.openai.com/docs/api-reference/responses-streaming)\nfor more information."},"stream_options":{"oneOf":[{"type":"null"},{"description":"Options for streaming responses. Only set this when you set `stream: true`.","type":"object","properties":{"include_obfuscation":{"type":["boolean","null"],"description":"When true, stream obfuscation will be enabled. Stream obfuscation adds\nrandom characters to an `obfuscation` field on streaming delta events to\nnormalize payload sizes as a mitigation to certain side-channel attacks.\nThese obfuscation fields are included by default, but add a small amount\nof overhead to the data stream. You can set `include_obfuscation` to\nfalse to optimize for bandwidth if you trust the network links between\nyour application and the OpenAI API."}},"title":"ResponseStreamOptions"}]},"temperature":{"type":["number","null"],"format":"float","description":"What sampling temperature to use, between 0 and 2. Higher values like 0.8\nwill make the output more random, while lower values like 0.2 will make it\nmore focused and deterministic. We generally recommend altering this or\n`top_p` but not both."},"text":{"oneOf":[{"type":"null"},{"description":"Configuration options for a text response from the model. Can be plain\ntext or structured JSON data. Learn more:\n- [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n- [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)","type":"object","properties":{"format":{"description":"An object specifying the format that the model must output.\n\nConfiguring `{ \"type\": \"json_schema\" }` enables Structured Outputs,\nwhich ensures the model will match your supplied JSON schema. Learn more in the\n[Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs).\n\nThe default format is `{ \"type\": \"text\" }` with no additional options.\n\n**Not recommended for gpt-4o and newer models:**\n\nSetting to `{ \"type\": \"json_object\" }` enables the older JSON mode, which\nensures the message the model generates is valid JSON. Using `json_schema`\nis preferred for models that support it.","oneOf":[{"type":"object","description":"Default response format. Used to generate text responses.","required":["type"],"properties":{"type":{"type":"string","enum":["text"]}}},{"type":"object","description":"JSON object response format. An older method of generating JSON responses.\nUsing `json_schema` is recommended for models that support it.\nNote that the model will not generate JSON without a system or user message\ninstructing it to do so.","required":["type"],"properties":{"type":{"type":"string","enum":["json_object"]}}},{"allOf":[{"description":"JSON Schema response format. Used to generate structured JSON responses.\nLearn more about [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs).","type":"object","required":["name","schema"],"properties":{"description":{"type":["string","null"],"description":"A description of what the response format is for, used by the model to determine how to respond in the format."},"name":{"type":"string","description":"The name of the response format. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64."},"schema":{"description":"The schema for the response format, described as a JSON Schema object.\nLearn how to build JSON schemas [here](https://json-schema.org/)."},"strict":{"type":["boolean","null"],"description":"Whether to enable strict schema adherence when generating the output.\nIf set to true, the model will always follow the exact schema defined\nin the `schema` field. Only a subset of JSON Schema is supported when\n`strict` is `true`. To learn more, read the [Structured Outputs\nguide](https://platform.openai.com/docs/guides/structured-outputs)."}},"title":"ResponseFormatJsonSchema"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["json_schema"]}}}],"description":"JSON Schema response format. Used to generate structured JSON responses.\nLearn more about [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)."}],"title":"TextResponseFormatConfiguration"},"verbosity":{"oneOf":[{"type":"null"},{"description":"Constrains the verbosity of the model's response. Lower values will result in\nmore concise responses, while higher values will result in more verbose responses.\n\nCurrently supported values are `low`, `medium`, and `high`.","type":"string","enum":["low","medium","high"],"title":"Verbosity"}]}},"title":"ResponseTextParam"}]},"tool_choice":{"oneOf":[{"type":"null"},{"description":"How the model should select which tool (or tools) to use when generating\na response. See the `tools` parameter to see how to specify which tools\nthe model can call.","oneOf":[{"allOf":[{"description":"Constrains the tools available to the model to a pre-defined set.","type":"object","required":["mode","tools"],"properties":{"mode":{"description":"Constrains the tools available to the model to a pre-defined set.\n\n`auto` allows the model to pick from among the allowed tools and generate a\nmessage.\n\n`required` requires the model to call one or more of the allowed tools.","type":"string","enum":["auto","required"],"title":"ToolChoiceAllowedMode"},"tools":{"type":"array","items":{},"description":"A list of tool definitions that the model should be allowed to call.\n\nFor the Responses API, the list of tool definitions might look like:\n```json\n[\n { \"type\": \"function\", \"name\": \"get_weather\" },\n { \"type\": \"mcp\", \"server_label\": \"deepwiki\" },\n { \"type\": \"image_generation\" }\n]\n```"}},"title":"ToolChoiceAllowed"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["allowed_tools"]}}}],"description":"Constrains the tools available to the model to a pre-defined set."},{"allOf":[{"description":"Use this option to force the model to call a specific function.","type":"object","required":["name"],"properties":{"name":{"type":"string","description":"The name of the function to call."}},"title":"ToolChoiceFunction"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function"]}}}],"description":"Use this option to force the model to call a specific function."},{"allOf":[{"description":"Use this option to force the model to call a specific tool on a remote MCP server.","type":"object","required":["name","server_label"],"properties":{"name":{"type":"string","description":"The name of the tool to call on the server."},"server_label":{"type":"string","description":"The label of the MCP server to use."}},"title":"ToolChoiceMCP"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp"]}}}],"description":"Use this option to force the model to call a specific tool on a remote MCP server."},{"allOf":[{"description":"Use this option to force the model to call a custom tool.","type":"object","required":["name"],"properties":{"name":{"type":"string","description":"The name of the custom tool to call."}},"title":"ToolChoiceCustom"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom"]}}}],"description":"Use this option to force the model to call a custom tool."},{"type":"object","description":"Forces the model to call the apply_patch tool when executing a tool call.","required":["type"],"properties":{"type":{"type":"string","enum":["apply_patch"]}}},{"type":"object","description":"Forces the model to call the function shell tool when a tool call is required.","required":["type"],"properties":{"type":{"type":"string","enum":["shell"]}}},{"allOf":[{"description":"Indicates that the model should use a built-in tool to generate a response.\n[Learn more about built-in tools](https://platform.openai.com/docs/guides/tools).","oneOf":[{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_search"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_preview"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer_use_preview"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer_use"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_preview_2025_03_11"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["code_interpreter"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["image_generation"]}}}],"title":"ToolChoiceTypes"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["hosted"]}}}],"description":"Indicates that the model should use a built-in tool to generate a response.\n[Learn more about built-in tools](https://platform.openai.com/docs/guides/tools)."},{"allOf":[{"description":"Controls which (if any) tool is called by the model.\n\n`none` means the model will not call any tool and instead generates a message.\n\n`auto` means the model can pick between generating a message or calling one or\nmore tools.\n\n`required` means the model must call one or more tools.","type":"string","enum":["none","auto","required"],"title":"ToolChoiceOptions"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mode"]}}}],"description":"Controls which (if any) tool is called by the model.\n\n`none` means the model will not call any tool and instead generates a message.\n\n`auto` means the model can pick between generating a message or calling one or\nmore tools.\n\n`required` means the model must call one or more tools."}],"title":"ToolChoiceParam"}]},"tools":{"type":["array","null"],"items":{"oneOf":[{"allOf":[{"description":"Defines a function in your own code the model can choose to call. Learn more about [function\ncalling](https://platform.openai.com/docs/guides/tools).","type":"object","required":["name"],"properties":{"defer_loading":{"type":["boolean","null"],"description":"Whether this function is deferred and loaded via tool search."},"description":{"type":["string","null"],"description":"A description of the function. Used by the model to determine whether or not to call the\nfunction."},"name":{"type":"string","description":"The name of the function to call."},"parameters":{"description":"A JSON schema object describing the parameters of the function."},"strict":{"type":["boolean","null"],"description":"Whether to enforce strict parameter validation. Default `true`."}},"title":"FunctionTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function"]}}}],"description":"Defines a function in your own code the model can choose to call. Learn more about [function\ncalling](https://platform.openai.com/docs/guides/tools)."},{"allOf":[{"description":"A tool that searches for relevant content from uploaded files. Learn more about the [file search\ntool](https://platform.openai.com/docs/guides/tools-file-search).","type":"object","required":["vector_store_ids"],"properties":{"filters":{"oneOf":[{"type":"null"},{"description":"A filter to apply.","oneOf":[{"description":"A filter used to compare a specified attribute key to a given value using a defined\ncomparison operation.","type":"object","required":["type","key","value"],"properties":{"key":{"type":"string","description":"The key to compare against the value."},"type":{"description":"Specifies the comparison operator: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`.\n- `eq`: equals\n- `ne`: not equal\n- `gt`: greater than\n- `gte`: greater than or equal\n- `lt`: less than\n- `lte`: less than or equal\n- `in`: in\n- `nin`: not in","type":"string","enum":["eq","ne","gt","gte","lt","lte","in","nin"],"title":"ComparisonType"},"value":{"description":"The value to compare against the attribute key; supports string, number, or boolean types."}},"title":"ComparisonFilter"},{"description":"Combine multiple filters using `and` or `or`.","type":"object","required":["type","filters"],"properties":{"filters":{"type":"array","items":{"oneOf":"circular()","description":"Filters for file search.","title":"Filter"},"description":"Array of filters to combine. Items can be ComparisonFilter or CompoundFilter."},"type":{"type":"string","enum":["and","or"],"description":"'Type of operation: `and` or `or`.'"}},"title":"CompoundFilter"}],"title":"Filter"}]},"max_num_results":{"type":["integer","null"],"format":"int32","description":"The maximum number of results to return. This number should be between 1 and 50 inclusive.","minimum":0},"ranking_options":{"oneOf":[{"type":"null"},{"description":"Ranking options for search.","type":"object","required":["ranker"],"properties":{"hybrid_search":{"oneOf":[{"type":"null"},{"description":"Weights that control how reciprocal rank fusion balances semantic embedding matches versus\nsparse keyword matches when hybrid search is enabled.","type":"object","required":["embedding_weight","text_weight"],"properties":{"embedding_weight":{"type":"number","format":"float","description":"The weight of the embedding in the reciprocal ranking fusion."},"text_weight":{"type":"number","format":"float","description":"The weight of the text in the reciprocal ranking fusion."}},"title":"HybridSearch"}]},"ranker":{"description":"The ranker to use for the file search.","type":"string","enum":["auto","default-2024-11-15"],"title":"RankVersionType"},"score_threshold":{"type":["number","null"],"format":"float","description":"The score threshold for the file search, a number between 0 and 1. Numbers closer to 1 will\nattempt to return only the most relevant results, but may return fewer results."}},"title":"RankingOptions"}]},"vector_store_ids":{"type":"array","items":{"type":"string"},"description":"The IDs of the vector stores to search."}},"title":"FileSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_search"]}}}],"description":"A tool that searches for relevant content from uploaded files. Learn more about the [file search\ntool](https://platform.openai.com/docs/guides/tools-file-search)."},{"allOf":[{"description":"A tool that controls a virtual computer. Learn more about the [computer\nuse tool](https://platform.openai.com/docs/guides/tools-computer-use).","type":"object","required":["environment","display_width","display_height"],"properties":{"display_height":{"type":"integer","format":"int32","description":"The height of the computer display.","minimum":0},"display_width":{"type":"integer","format":"int32","description":"The width of the computer display.","minimum":0},"environment":{"description":"The type of computer environment to control.","type":"string","enum":["windows","mac","linux","ubuntu","browser"],"title":"ComputerEnvironment"}},"title":"ComputerUsePreviewTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer_use_preview"]}}}],"description":"A tool that controls a virtual computer. Learn more about the [computer\nuse tool](https://platform.openai.com/docs/guides/tools-computer-use)."},{"allOf":[{"description":"Search the Internet for sources related to the prompt. Learn more about the\n[web search tool](https://platform.openai.com/docs/guides/tools-web-search).","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_content_types":{"type":["array","null"],"items":{"type":"string","description":"The type of content to search for.","enum":["text","image"],"title":"SearchContentType"},"description":"The types of content to search for."},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Defaults to `approximate` when omitted in JSON input.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search"]}}}],"description":"Search the Internet for sources related to the prompt. Learn more about the\n[web search tool](https://platform.openai.com/docs/guides/tools-web-search)."},{"allOf":[{"description":"type: web_search_2025_08_26","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_content_types":{"type":["array","null"],"items":{"type":"string","description":"The type of content to search for.","enum":["text","image"],"title":"SearchContentType"},"description":"The types of content to search for."},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Defaults to `approximate` when omitted in JSON input.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_2025_08_26"]}}}],"description":"type: web_search_2025_08_26"},{"allOf":[{"description":"Give the model access to additional tools via remote Model Context Protocol\n(MCP) servers. [Learn more about MCP](https://platform.openai.com/docs/guides/tools-remote-mcp).","type":"object","required":["server_label"],"properties":{"allowed_tools":{"oneOf":[{"type":"null"},{"description":"List of allowed tool names or a filter object.","oneOf":[{"type":"array","items":{"type":"string"},"description":"A string array of allowed tool names"},{"description":"A filter object to specify which tools are allowed.","type":"object","properties":{"read_only":{"type":["boolean","null"],"description":"Indicates whether or not a tool modifies data or is read-only.\nIf an MCP server is annotated with [readOnlyHint](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\nit will match this filter."},"tool_names":{"type":["array","null"],"items":{"type":"string"},"description":"List of allowed tool names."}},"title":"MCPToolFilter"}],"title":"MCPToolAllowedTools"}]},"authorization":{"type":["string","null"],"description":"An OAuth access token that can be used with a remote MCP server, either with a custom MCP\nserver URL or a service connector. Your application must handle the OAuth authorization\nflow and provide the token here."},"connector_id":{"oneOf":[{"type":"null"},{"description":"Identifier for service connectors, like those available in ChatGPT. One of `server_url` or\n`connector_id` must be provided. Learn more about service connectors [here](https://platform.openai.com/docs/guides/tools-remote-mcp#connectors).\n\nCurrently supported `connector_id` values are:\n- Dropbox: `connector_dropbox`\n- Gmail: `connector_gmail`\n- Google Calendar: `connector_googlecalendar`\n- Google Drive: `connector_googledrive`\n- Microsoft Teams: `connector_microsoftteams`\n- Outlook Calendar: `connector_outlookcalendar`\n- Outlook Email: `connector_outlookemail`\n- SharePoint: `connector_sharepoint`","type":"string","enum":["connector_dropbox","connector_gmail","connector_googlecalendar","connector_googledrive","connector_microsoftteams","connector_outlookcalendar","connector_outlookemail","connector_sharepoint"],"title":"McpToolConnectorId"}]},"defer_loading":{"type":["boolean","null"],"description":"Whether this MCP tool is deferred and discovered via tool search."},"headers":{"description":"Optional HTTP headers to send to the MCP server. Use for authentication or other purposes."},"require_approval":{"oneOf":[{"type":"null"},{"description":"Specify which of the MCP server's tools require approval.","oneOf":[{"description":"Specify which of the MCP server's tools require approval. Can be\n`always`, `never`, or a filter object associated with tools\nthat require approval.","type":"object","properties":{"always":{"oneOf":[{"type":"null"},{"description":"A list of tools that always require approval.","type":"object","properties":{"read_only":{"type":["boolean","null"],"description":"Indicates whether or not a tool modifies data or is read-only.\nIf an MCP server is annotated with [readOnlyHint](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\nit will match this filter."},"tool_names":{"type":["array","null"],"items":{"type":"string"},"description":"List of allowed tool names."}},"title":"MCPToolFilter"}]},"never":{"oneOf":[{"type":"null"},{"description":"A list of tools that never require approval.","type":"object","properties":{"read_only":{"type":["boolean","null"],"description":"Indicates whether or not a tool modifies data or is read-only.\nIf an MCP server is annotated with [readOnlyHint](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\nit will match this filter."},"tool_names":{"type":["array","null"],"items":{"type":"string"},"description":"List of allowed tool names."}},"title":"MCPToolFilter"}]}},"title":"MCPToolApprovalFilter"},{"description":"Specify a single approval policy for all tools. One of `always` or\n`never`. When set to `always`, all tools will require approval. When\nset to `never`, all tools will not require approval.","type":"string","enum":["always","never"],"title":"MCPToolApprovalSetting"}],"title":"MCPToolRequireApproval"}]},"server_description":{"type":["string","null"],"description":"Optional description of the MCP server, used to provide more context."},"server_label":{"type":"string","description":"A label for this MCP server, used to identify it in tool calls."},"server_url":{"type":["string","null"],"description":"The URL for the MCP server. One of `server_url` or `connector_id` must be provided."}},"title":"MCPTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp"]}}}],"description":"Give the model access to additional tools via remote Model Context Protocol\n(MCP) servers. [Learn more about MCP](https://platform.openai.com/docs/guides/tools-remote-mcp)."},{"allOf":[{"description":"A tool that runs Python code to help generate a response to a prompt.","type":"object","required":["container"],"properties":{"container":{"description":"The code interpreter container. Can be a container ID or an object that\nspecifies uploaded file IDs to make available to your code, along with an\noptional `memory_limit` setting.","oneOf":[{"allOf":[{"description":"Configuration for a code interpreter container. Optionally specify the IDs of the\nfiles to run the code on.","type":"object","properties":{"file_ids":{"type":["array","null"],"items":{"type":"string"},"description":"An optional list of uploaded files to make available to your code."},"memory_limit":{"type":["integer","null"],"format":"int64","minimum":0}},"title":"CodeInterpreterContainerAuto"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["auto"]}}}],"description":"Configuration for a code interpreter container. Optionally specify the IDs of the\nfiles to run the code on."},{"type":"object","description":"The container ID.","required":["type"],"properties":{"type":{"type":"string","enum":["container_i_d"]}}}],"title":"CodeInterpreterToolContainer"}},"title":"CodeInterpreterTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["code_interpreter"]}}}],"description":"A tool that runs Python code to help generate a response to a prompt."},{"allOf":[{"description":"A tool that generates images using a model like `gpt-image-1`.","type":"object","properties":{"action":{"oneOf":[{"type":"null"},{"description":"Whether to generate a new image or edit an existing image. Default: `auto`.","type":"string","enum":["generate","edit","auto"],"title":"ImageGenActionEnum"}]},"background":{"oneOf":[{"type":"null"},{"description":"Background type for the generated image. One of `transparent`,\n`opaque`, or `auto`. Default: `auto`.","type":"string","enum":["transparent","opaque","auto"],"title":"ImageGenToolBackground"}]},"input_fidelity":{"oneOf":[{"type":"null"},{"description":"Control how much effort the model will exert to match the style and features, especially facial features,\nof input images. This parameter is only supported for `gpt-image-1`. Unsupported\nfor `gpt-image-1-mini`. Supports `high` and `low`. Defaults to `low`.","type":"string","enum":["high","low"],"title":"InputFidelity"}]},"input_image_mask":{"oneOf":[{"type":"null"},{"description":"Optional mask for inpainting. Contains `image_url`\n(string, optional) and `file_id` (string, optional).","type":"object","properties":{"file_id":{"type":["string","null"],"description":"File ID for the mask image."},"image_url":{"type":["string","null"],"description":"Base64-encoded mask image."}},"title":"ImageGenToolInputImageMask"}]},"model":{"type":["string","null"],"description":"The image generation model to use. Default: `gpt-image-1`."},"moderation":{"oneOf":[{"type":"null"},{"description":"Moderation level for the generated image. Default: `auto`.","type":"string","enum":["auto","low"],"title":"ImageGenToolModeration"}]},"output_compression":{"type":["integer","null"],"format":"int32","description":"Compression level for the output image. Default: 100.","minimum":0},"output_format":{"oneOf":[{"type":"null"},{"description":"The output format of the generated image. One of `png`, `webp`, or\n`jpeg`. Default: `png`.","type":"string","enum":["png","webp","jpeg"],"title":"ImageGenToolOutputFormat"}]},"partial_images":{"type":["integer","null"],"format":"int32","description":"Number of partial images to generate in streaming mode, from 0 (default value) to 3.","minimum":0},"quality":{"oneOf":[{"type":"null"},{"description":"The quality of the generated image. One of `low`, `medium`, `high`,\nor `auto`. Default: `auto`.","type":"string","enum":["low","medium","high","auto"],"title":"ImageGenToolQuality"}]},"size":{"oneOf":[{"type":"null"},{"description":"The size of the generated images. For `gpt-image-2` and\n`gpt-image-2-2026-04-21`, arbitrary resolutions are supported as\n`WIDTHxHEIGHT` strings, for example `1536x864`. Width and height\nmust both be divisible by 16 and the requested aspect ratio must be\nbetween 1:3 and 3:1. Resolutions above `2560x1440` are experimental,\nand the maximum supported resolution is `3840x2160`. The requested\nsize must also satisfy the model's current pixel and edge limits.\nThe standard sizes `1024x1024`, `1536x1024`, and `1024x1536` are\nsupported by the GPT image models; `auto` is supported for models\nthat allow automatic sizing. For `dall-e-2`, use one of `256x256`,\n`512x512`, or `1024x1024`. For `dall-e-3`, use one of `1024x1024`,\n`1792x1024`, or `1024x1792`.","oneOf":[{"type":"string","enum":["auto"]},{"type":"string","enum":["1024x1024"]},{"type":"string","enum":["1024x1536"]},{"type":"string","enum":["1536x1024"]},{"type":"object","required":["other"],"properties":{"other":{"type":"string"}}}],"title":"ImageGenToolSize"}]}},"title":"ImageGenTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["image_generation"]}}}],"description":"A tool that generates images using a model like `gpt-image-1`."},{"type":"object","description":"A tool that allows the model to execute shell commands in a local environment.","required":["type"],"properties":{"type":{"type":"string","enum":["local_shell"]}}},{"allOf":[{"description":"A tool that allows the model to execute shell commands.","type":"object","properties":{"environment":{"oneOf":[{"type":"null"},{"description":"The execution environment for the shell tool.","oneOf":[{"allOf":[{"description":"Automatically creates a container for this request.","type":"object","properties":{"file_ids":{"type":["array","null"],"items":{"type":"string"},"description":"An optional list of uploaded file IDs to make available in the container."},"network_policy":{"oneOf":[{"type":"null"},{"description":"Network access policy for the container.","oneOf":[{"type":"object","description":"Disable all outbound network access.","required":["type"],"properties":{"type":{"type":"string","enum":["disabled"]}}},{"allOf":[{"description":"Allow access only to specified domains.","type":"object","required":["allowed_domains"],"properties":{"allowed_domains":{"type":"array","items":{"type":"string"},"description":"A list of allowed domains."},"domain_secrets":{"type":["array","null"],"items":{"type":"object","description":"A domain-scoped secret injected for allowlisted domains.","required":["domain","name","value"],"properties":{"domain":{"type":"string","description":"The domain associated with the secret."},"name":{"type":"string","description":"The name of the secret to inject for the domain."},"value":{"type":"string","description":"The secret value to inject for the domain."}},"title":"ContainerNetworkPolicyDomainSecretParam"},"description":"Optional domain-scoped secrets for allowlisted domains."}},"title":"ContainerNetworkPolicyAllowlistDetails"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["allowlist"]}}}],"description":"Allow access only to specified domains."}],"title":"ContainerNetworkPolicy"}]},"skills":{"type":["array","null"],"items":{"oneOf":[{"allOf":[{"description":"Reference a skill by ID.","type":"object","required":["skill_id"],"properties":{"skill_id":{"type":"string","description":"The ID of the skill to reference."},"version":{"type":["string","null"],"description":"An optional specific version to use."}},"title":"SkillReferenceParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["skill_reference"]}}}],"description":"Reference a skill by ID."},{"allOf":[{"description":"Provide an inline skill definition.","type":"object","required":["name","description","source"],"properties":{"description":{"type":"string","description":"The description of the skill."},"name":{"type":"string","description":"The name of the skill."},"source":{"description":"The inline source for the skill.","type":"object","required":["media_type","data"],"properties":{"data":{"type":"string","description":"The base64-encoded skill data."},"media_type":{"type":"string","description":"The media type. Always `\"application/zip\"`."}},"title":"InlineSkillSourceParam"}},"title":"InlineSkillParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["inline"]}}}],"description":"Provide an inline skill definition."}],"description":"A skill parameter — either a reference or inline definition.","title":"SkillParam"},"description":"An optional list of skills to make available in the container."}},"title":"ContainerAutoParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["container_auto"]}}}],"description":"Automatically creates a container for this request."},{"allOf":[{"description":"Use a local computer environment.","type":"object","properties":{"skills":{"type":["array","null"],"items":{"type":"object","description":"A local skill available in a local environment.","required":["name","description","path"],"properties":{"description":{"type":"string","description":"The description of the skill."},"name":{"type":"string","description":"The name of the skill."},"path":{"type":"string","description":"The path to the directory containing the skill."}},"title":"LocalSkillParam"},"description":"An optional list of local skills."}},"title":"LocalEnvironmentParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["local"]}}}],"description":"Use a local computer environment."},{"allOf":[{"description":"Reference an existing container by ID.","type":"object","required":["container_id"],"properties":{"container_id":{"type":"string","description":"The ID of the referenced container."}},"title":"ContainerReferenceParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["container_reference"]}}}],"description":"Reference an existing container by ID."}],"title":"FunctionShellEnvironment"}]}},"title":"FunctionShellToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["shell"]}}}],"description":"A tool that allows the model to execute shell commands."},{"allOf":[{"description":"A custom tool that processes input using a specified format. Learn more about [custom\ntools](https://platform.openai.com/docs/guides/function-calling#custom-tools)","type":"object","required":["name","format"],"properties":{"defer_loading":{"type":["boolean","null"],"description":"Whether this tool should be deferred and discovered via tool search."},"description":{"type":["string","null"],"description":"Optional description of the custom tool, used to provide more context."},"format":{"description":"The input format for the custom tool. Default is unconstrained text.","oneOf":[{"type":"object","description":"Unconstrained free-form text.","required":["type"],"properties":{"type":{"type":"string","enum":["text"]}}},{"allOf":[{"description":"A grammar defined by the user.","type":"object","required":["definition","syntax"],"properties":{"definition":{"type":"string","description":"The grammar definition."},"syntax":{"description":"The syntax of the grammar definition. One of `lark` or `regex`.","type":"string","enum":["lark","regex"],"title":"GrammarSyntax"}},"title":"CustomGrammarFormatParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["grammar"]}}}],"description":"A grammar defined by the user."}],"title":"CustomToolParamFormat"},"name":{"type":"string","description":"The name of the custom tool, used to identify it in tool calls."}},"title":"CustomToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom"]}}}],"description":"A custom tool that processes input using a specified format. Learn more about [custom\ntools](https://platform.openai.com/docs/guides/function-calling#custom-tools)"},{"allOf":[{"description":"A tool that controls a virtual computer. Learn more about the\n[computer tool](https://platform.openai.com/docs/guides/tools-computer-use).","type":"object","title":"ComputerTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer"]}}}],"description":"A tool that controls a virtual computer. Learn more about the\n[computer tool](https://platform.openai.com/docs/guides/tools-computer-use)."},{"allOf":[{"description":"Groups function/custom tools under a shared namespace.","type":"object","required":["name","description","tools"],"properties":{"description":{"type":"string","description":"A description of the namespace shown to the model."},"name":{"type":"string","description":"The namespace name used in tool calls (for example, `crm`)."},"tools":{"type":"array","items":{"oneOf":[{"allOf":[{"type":"object","description":"A function tool that can be used within a namespace or with tool search.","required":["name"],"properties":{"defer_loading":{"type":["boolean","null"],"description":"Whether this function should be deferred and discovered via tool search."},"description":{"type":["string","null"],"description":"A description of the function."},"name":{"type":"string","description":"The name of the function."},"parameters":{"description":"A JSON schema object describing the parameters of the function."},"strict":{"type":["boolean","null"],"description":"Whether to enforce strict parameter validation."}},"title":"FunctionToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function"]}}}]},{"allOf":[{"type":"object","required":["name","format"],"properties":{"defer_loading":{"type":["boolean","null"],"description":"Whether this tool should be deferred and discovered via tool search."},"description":{"type":["string","null"],"description":"Optional description of the custom tool, used to provide more context."},"format":{"description":"The input format for the custom tool. Default is unconstrained text.","oneOf":[{"type":"object","description":"Unconstrained free-form text.","required":["type"],"properties":{"type":{"type":"string","enum":["text"]}}},{"allOf":[{"description":"A grammar defined by the user.","type":"object","required":["definition","syntax"],"properties":{"definition":{"type":"string","description":"The grammar definition."},"syntax":{"description":"The syntax of the grammar definition. One of `lark` or `regex`.","type":"string","enum":["lark","regex"],"title":"GrammarSyntax"}},"title":"CustomGrammarFormatParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["grammar"]}}}],"description":"A grammar defined by the user."}],"title":"CustomToolParamFormat"},"name":{"type":"string","description":"The name of the custom tool, used to identify it in tool calls."}},"title":"CustomToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom"]}}}]}],"description":"A function or custom tool that belongs to a namespace.","title":"NamespaceToolParamTool"},"description":"The function/custom tools available inside this namespace."}},"title":"NamespaceToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["namespace"]}}}],"description":"Groups function/custom tools under a shared namespace."},{"allOf":[{"description":"Hosted or BYOT tool search configuration for deferred tools.","type":"object","properties":{"description":{"type":["string","null"],"description":"Description shown to the model for a client-executed tool search tool."},"execution":{"oneOf":[{"type":"null"},{"description":"Whether tool search is executed by the server or by the client.","type":"string","enum":["server","client"],"title":"ToolSearchExecutionType"}]},"parameters":{"description":"Parameter schema for a client-executed tool search tool."}},"title":"ToolSearchToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["tool_search"]}}}],"description":"Hosted or BYOT tool search configuration for deferred tools."},{"allOf":[{"description":" This tool searches the web for relevant results to use in a response. Learn more about the [web search\ntool](https://platform.openai.com/docs/guides/tools-web-search).","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_content_types":{"type":["array","null"],"items":{"type":"string","description":"The type of content to search for.","enum":["text","image"],"title":"SearchContentType"},"description":"The types of content to search for."},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Defaults to `approximate` when omitted in JSON input.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_preview"]}}}],"description":" This tool searches the web for relevant results to use in a response. Learn more about the [web search\ntool](https://platform.openai.com/docs/guides/tools-web-search)."},{"allOf":[{"description":"type: web_search_preview_2025_03_11","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_content_types":{"type":["array","null"],"items":{"type":"string","description":"The type of content to search for.","enum":["text","image"],"title":"SearchContentType"},"description":"The types of content to search for."},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Defaults to `approximate` when omitted in JSON input.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_preview_2025_03_11"]}}}],"description":"type: web_search_preview_2025_03_11"},{"type":"object","description":"Allows the assistant to create, delete, or update files using unified diffs.","required":["type"],"properties":{"type":{"type":"string","enum":["apply_patch"]}}}],"description":"Definitions for model-callable tools.","title":"Tool"},"description":"An array of tools the model may call while generating a response. You\ncan specify which tool to use by setting the `tool_choice` parameter.\n\nWe support the following categories of tools:\n- **Built-in tools**: Tools that are provided by OpenAI that extend the\n model's capabilities, like [web search](https://platform.openai.com/docs/guides/tools-web-search)\n or [file search](https://platform.openai.com/docs/guides/tools-file-search). Learn more about\n [built-in tools](https://platform.openai.com/docs/guides/tools).\n- **MCP Tools**: Integrations with third-party systems via custom MCP servers\n or predefined connectors such as Google Drive and SharePoint. Learn more about\n [MCP Tools](https://platform.openai.com/docs/guides/tools-connectors-mcp).\n- **Function calls (custom tools)**: Functions that are defined by you,\n enabling the model to call your own code with strongly typed arguments\n and outputs. Learn more about\n [function calling](https://platform.openai.com/docs/guides/function-calling). You can also use\n custom tools to call your own code."},"top_logprobs":{"type":["integer","null"],"format":"int32","description":"An integer between 0 and 20 specifying the number of most likely tokens to return at each\ntoken position, each with an associated log probability. In some cases, the number of returned\ntokens may be fewer than requested.","minimum":0},"top_p":{"type":["number","null"],"format":"float","description":"An alternative to sampling with temperature, called nucleus sampling,\nwhere the model considers the results of the tokens with top_p probability\nmass. So 0.1 means only the tokens comprising the top 10% probability mass\nare considered.\n\nWe generally recommend altering this or `temperature` but not both."},"truncation":{"oneOf":[{"type":"null"},{"description":"The truncation strategy to use for the model response.\n - `auto`: If the input to this Response exceeds\n the model's context window size, the model will truncate the\n response to fit the context window by dropping items from the beginning of the conversation.\n - `disabled` (default): If the input size will exceed the context window\n size for a model, the request will fail with a 400 error.","type":"string","enum":["auto","disabled"],"title":"Truncation"}]}},"title":"CreateResponse"},"example":{"model":"gpt-4o","input":"You are a helpful assistant.","stream":false}}},"required":true}} \ No newline at end of file diff --git a/website/docs/api/HTTP/post-responses.StatusCodes.json b/website/docs/api/HTTP/post-responses.StatusCodes.json index 4d3490a2d..422eedf1e 100644 --- a/website/docs/api/HTTP/post-responses.StatusCodes.json +++ b/website/docs/api/HTTP/post-responses.StatusCodes.json @@ -1 +1 @@ -{"responses":{"200":{"description":"Response generated successfully","content":{"application/json":{"schema":{"type":"object","description":"The complete response returned by the Responses API.","required":["created_at","id","model","object","output","status"],"properties":{"background":{"type":["boolean","null"],"description":"Whether to run the model response in the background.\n[Learn more](https://platform.openai.com/docs/guides/background)."},"billing":{"oneOf":[{"type":"null"},{"description":"Billing information for the response.","type":"object","required":["payer"],"properties":{"payer":{"type":"string"}},"title":"Billing"}]},"conversation":{"oneOf":[{"type":"null"},{"description":"The conversation that this response belongs to. Input items and output\nitems from this response are automatically added to this conversation.","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The unique ID of the conversation."}},"title":"Conversation"}]},"created_at":{"type":"integer","format":"int64","description":"Unix timestamp (in seconds) when this Response was created.","minimum":0},"error":{"oneOf":[{"type":"null"},{"description":"An error object returned when the model fails to generate a Response.","type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"The error code for the response."},"message":{"type":"string","description":"A human-readable description of the error."}},"title":"ErrorObject"}]},"id":{"type":"string","description":"Unique identifier for this response."},"incomplete_details":{"oneOf":[{"type":"null"},{"description":"Details about why the response is incomplete, if any.","type":"object","required":["reason"],"properties":{"reason":{"type":"string","description":"The reason why the response is incomplete."}},"title":"IncompleteDetails"}]},"instructions":{"oneOf":[{"type":"null"},{"description":"A system (or developer) message inserted into the model's context.\n\nWhen using along with `previous_response_id`, the instructions from a previous response\nwill not be carried over to the next response. This makes it simple to swap out\nsystem (or developer) messages in new responses.","oneOf":[{"type":"string","description":"A text input to the model, equivalent to a text input with the `developer` role."},{"type":"array","items":{"oneOf":[{"description":"A reference to an existing item by ID.\nHas a required `id` field and optional `type` (can be \"item_reference\" or null).\nMust be tried first as it's the most minimal structure.","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The ID of the item to reference."},"type":{"oneOf":[{"type":"null"},{"description":"The type of item to reference. Can be \"item_reference\" or null.","type":"string","enum":["item_reference"],"title":"ItemReferenceType"}]}},"title":"ItemReference"},{"description":"All structured items with proper type discrimination.\nIncludes InputMessage, OutputMessage, and all tool calls/outputs.\nUses the discriminated `Item` enum for efficient, type-safe deserialization.","oneOf":[{"allOf":[{"description":"A message (type: \"message\").\nCan represent InputMessage (user/system/developer) or OutputMessage (assistant).\n\nInputMessage:\n A message input to the model with a role indicating instruction following hierarchy.\n Instructions given with the developer or system role take precedence over instructions given with the user role.\nOutputMessage:\n A message output from the model.","oneOf":[{"description":"An output message from the model (role: assistant, has required id & status).\nThis must come first as it has the most specific structure (required id and status fields).","type":"object","required":["content","id","role","status"],"properties":{"content":{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A text output from the model.","type":"object","required":["annotations","text"],"properties":{"annotations":{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A citation to a file.","type":"object","required":["file_id","filename","index"],"properties":{"file_id":{"type":"string","description":"The ID of the file."},"filename":{"type":"string","description":"The filename of the file cited."},"index":{"type":"integer","format":"int32","description":"The index of the file in the list of files.","minimum":0}},"title":"FileCitationBody"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_citation"]}}}],"description":"A citation to a file."},{"allOf":[{"description":"A citation for a web resource used to generate a model response.","type":"object","required":["end_index","start_index","title","url"],"properties":{"end_index":{"type":"integer","format":"int32","description":"The index of the last character of the URL citation in the message.","minimum":0},"start_index":{"type":"integer","format":"int32","description":"The index of the first character of the URL citation in the message.","minimum":0},"title":{"type":"string","description":"The title of the web resource."},"url":{"type":"string","description":"The URL of the web resource."}},"title":"UrlCitationBody"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["url_citation"]}}}],"description":"A citation for a web resource used to generate a model response."},{"allOf":[{"description":"A citation for a container file used to generate a model response.","type":"object","required":["container_id","end_index","file_id","filename","start_index"],"properties":{"container_id":{"type":"string","description":"The ID of the container file."},"end_index":{"type":"integer","format":"int32","description":"The index of the last character of the container file citation in the message.","minimum":0},"file_id":{"type":"string","description":"The ID of the file."},"filename":{"type":"string","description":"The filename of the container file cited."},"start_index":{"type":"integer","format":"int32","description":"The index of the first character of the container file citation in the message.","minimum":0}},"title":"ContainerFileCitationBody"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["container_file_citation"]}}}],"description":"A citation for a container file used to generate a model response."},{"allOf":[{"description":"A path to a file.","type":"object","required":["file_id","index"],"properties":{"file_id":{"type":"string","description":"The ID of the file."},"index":{"type":"integer","format":"int32","description":"The index of the file in the list of files.","minimum":0}},"title":"FilePath"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_path"]}}}],"description":"A path to a file."}],"title":"Annotation"},"description":"The annotations of the text output."},"logprobs":{"type":["array","null"],"items":{"type":"object","required":["bytes","logprob","token","top_logprobs"],"properties":{"bytes":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"logprob":{"type":"number","format":"double"},"token":{"type":"string"},"top_logprobs":{"type":"array","items":{"type":"object","required":["bytes","logprob","token"],"properties":{"bytes":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"logprob":{"type":"number","format":"double"},"token":{"type":"string"}},"title":"TopLogProb"}}},"title":"LogProb"}},"text":{"type":"string","description":"The text output from the model."}},"title":"OutputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["output_text"]}}}],"description":"A text output from the model."},{"allOf":[{"description":"A refusal from the model.","type":"object","required":["refusal"],"properties":{"refusal":{"type":"string","description":"The refusal explanation from the model."}},"title":"RefusalContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["refusal"]}}}],"description":"A refusal from the model."}],"title":"OutputMessageContent"},"description":"The content of the output message."},"id":{"type":"string","description":"The unique ID of the output message."},"role":{"description":"The role of the output message. Always `assistant`.","type":"string","enum":["assistant"],"title":"AssistantRole"},"status":{"description":"The status of the message input. One of `in_progress`, `completed`, or\n`incomplete`. Populated when input items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}},"title":"OutputMessage"},{"description":"A structured input message (role: user/system/developer, content is `Vec`).\nHas structured content list and optional id/status fields.\n\nA message input to the model with a role indicating instruction following hierarchy.\nInstructions given with the `developer` or `system` role take precedence over instructions\ngiven with the `user` role.","type":"object","required":["content","role"],"properties":{"content":{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A text input to the model.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text input to the model."}},"title":"InputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_text"]}}}],"description":"A text input to the model."},{"allOf":[{"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision).","type":"object","required":["detail"],"properties":{"detail":{"description":"The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`.\nDefaults to `auto`.","type":"string","enum":["auto","low","high"],"title":"ImageDetail"},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"image_url":{"type":["string","null"],"description":"The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image\nin a data URL."}},"title":"InputImageContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_image"]}}}],"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision)."},{"allOf":[{"description":"A file input to the model.","type":"object","properties":{"file_data":{"type":["string","null"],"description":"The content of the file to be sent to the model."},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"file_url":{"type":["string","null"],"description":"The URL of the file to be sent to the model."},"filename":{"type":["string","null"],"description":"The name of the file to be sent to the model."}},"title":"InputFileContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_file"]}}}],"description":"A file input to the model."}],"description":"Parts of a message: text, image, file, or audio.","title":"InputContent"},"description":"A list of one or many input items to the model, containing different content types."},"role":{"description":"The role of the message input. One of `user`, `system`, or `developer`.\nNote: `assistant` is NOT allowed here; use OutputMessage instead.","type":"string","enum":["user","system","developer"],"title":"InputRole"},"status":{"oneOf":[{"type":"null"},{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]}},"title":"InputMessage"}],"title":"MessageItem"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["message"]}}}],"description":"A message (type: \"message\").\nCan represent InputMessage (user/system/developer) or OutputMessage (assistant).\n\nInputMessage:\n A message input to the model with a role indicating instruction following hierarchy.\n Instructions given with the developer or system role take precedence over instructions given with the user role.\nOutputMessage:\n A message output from the model."},{"allOf":[{"description":"The results of a file search tool call. See the\n[file search guide](https://platform.openai.com/docs/guides/tools-file-search) for more information.","type":"object","required":["id","queries","status"],"properties":{"id":{"type":"string","description":"The unique ID of the file search tool call."},"queries":{"type":"array","items":{"type":"string"},"description":"The queries used to search for files."},"results":{"type":["array","null"],"items":{"type":"object","description":"A single result from a file search.","required":["attributes","file_id","filename","score","text"],"properties":{"attributes":{"type":"object","description":"Set of 16 key-value pairs that can be attached to an object. This can be useful for storing\nadditional information about the object in a structured format, and querying for objects\nAPI or the dashboard. Keys are strings with a maximum length of 64 characters\n. Values are strings with a maximum length of 512 characters, booleans, or numbers.","additionalProperties":{},"propertyNames":{"type":"string"}},"file_id":{"type":"string","description":"The unique ID of the file."},"filename":{"type":"string","description":"The name of the file."},"score":{"type":"number","format":"float","description":"The relevance score of the file - a value between 0 and 1."},"text":{"type":"string","description":"The text that was retrieved from the file."}},"title":"FileSearchToolCallResult"},"description":"The results of the file search tool call."},"status":{"description":"The status of the file search tool call. One of `in_progress`, `searching`,\n`incomplete`,`failed`, or `completed`.","type":"string","enum":["in_progress","searching","incomplete","failed","completed"],"title":"FileSearchToolCallStatus"}},"title":"FileSearchToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_search_call"]}}}],"description":"The results of a file search tool call. See the\n[file search guide](https://platform.openai.com/docs/guides/tools-file-search) for more information."},{"allOf":[{"description":"A tool call to a computer use tool. See the\n[computer use guide](https://platform.openai.com/docs/guides/tools-computer-use) for more information.","type":"object","required":["action","call_id","id","pending_safety_checks","status"],"properties":{"action":{"oneOf":[{"allOf":[{"description":"A click action.","type":"object","required":["button","x","y"],"properties":{"button":{"description":"Indicates which mouse button was pressed during the click. One of `left`,\n`right`, `wheel`, `back`, or `forward`.","type":"string","enum":["left","right","wheel","back","forward"],"title":"ClickButtonType"},"x":{"type":"integer","format":"int32","description":"The x-coordinate where the click occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the click occurred."}},"title":"ClickParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["click"]}}}],"description":"A click action."},{"allOf":[{"description":"A double click action.","type":"object","required":["x","y"],"properties":{"x":{"type":"integer","format":"int32","description":"The x-coordinate where the double click occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the double click occurred."}},"title":"DoubleClickAction"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["double_click"]}}}],"description":"A double click action."},{"allOf":[{"description":"A drag action.","type":"object","required":["path"],"properties":{"path":{"type":"array","items":{"type":"object","description":"A point in 2D space.","required":["x","y"],"properties":{"x":{"type":"integer","format":"int32","description":"The x-coordinate."},"y":{"type":"integer","format":"int32","description":"The y-coordinate."}},"title":"DragPoint"},"description":"The path of points the cursor drags through."}},"title":"Drag"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["drag"]}}}],"description":"A drag action."},{"allOf":[{"description":"A collection of keypresses the model would like to perform.","type":"object","required":["keys"],"properties":{"keys":{"type":"array","items":{"type":"string"},"description":"The combination of keys the model is requesting to be pressed.\nThis is an array of strings, each representing a key."}},"title":"KeyPressAction"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["keypress"]}}}],"description":"A collection of keypresses the model would like to perform."},{"allOf":[{"description":"A mouse move action.","type":"object","required":["x","y"],"properties":{"x":{"type":"integer","format":"int32","description":"The x-coordinate to move to."},"y":{"type":"integer","format":"int32","description":"The y-coordinate to move to."}},"title":"Move"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["move"]}}}],"description":"A mouse move action."},{"type":"object","description":"A screenshot action.","required":["type"],"properties":{"type":{"type":"string","enum":["screenshot"]}}},{"allOf":[{"description":"A scroll action.","type":"object","required":["scroll_x","scroll_y","x","y"],"properties":{"scroll_x":{"type":"integer","format":"int32","description":"The horizontal scroll distance."},"scroll_y":{"type":"integer","format":"int32","description":"The vertical scroll distance."},"x":{"type":"integer","format":"int32","description":"The x-coordinate where the scroll occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the scroll occurred."}},"title":"Scroll"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["scroll"]}}}],"description":"A scroll action."},{"allOf":[{"description":"An action to type in text.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text to type."}},"title":"Type"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["type"]}}}],"description":"An action to type in text."},{"type":"object","description":"A wait action.","required":["type"],"properties":{"type":{"type":"string","enum":["wait"]}}}],"description":"Represents all user‐triggered actions.","title":"ComputerAction"},"call_id":{"type":"string","description":"An identifier used when responding to the tool call with output."},"id":{"type":"string","description":"The unique ID of the computer call."},"pending_safety_checks":{"type":"array","items":{"type":"object","required":["id"],"properties":{"code":{"type":["string","null"],"description":"The type of the pending safety check."},"id":{"type":"string","description":"The ID of the pending safety check."},"message":{"type":["string","null"],"description":"Details about the pending safety check."}},"title":"ComputerCallSafetyCheckParam"},"description":"The pending safety checks for the computer call."},"status":{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}},"title":"ComputerToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer_call"]}}}],"description":"A tool call to a computer use tool. See the\n[computer use guide](https://platform.openai.com/docs/guides/tools-computer-use) for more information."},{"allOf":[{"description":"The output of a computer tool call.","type":"object","required":["call_id","output"],"properties":{"acknowledged_safety_checks":{"type":["array","null"],"items":{"type":"object","required":["id"],"properties":{"code":{"type":["string","null"],"description":"The type of the pending safety check."},"id":{"type":"string","description":"The ID of the pending safety check."},"message":{"type":["string","null"],"description":"Details about the pending safety check."}},"title":"ComputerCallSafetyCheckParam"},"description":"The safety checks reported by the API that have been acknowledged by the developer."},"call_id":{"type":"string","description":"The ID of the computer tool call that produced the output."},"id":{"type":["string","null"],"description":"The unique ID of the computer tool call output. Optional when creating."},"output":{"description":"A computer screenshot image used with the computer use tool.","type":"object","required":["type"],"properties":{"file_id":{"type":["string","null"],"description":"The identifier of an uploaded file that contains the screenshot."},"image_url":{"type":["string","null"],"description":"The URL of the screenshot image."},"type":{"description":"Specifies the event type. For a computer screenshot, this property is always\nset to `computer_screenshot`.","type":"string","enum":["computer_screenshot"],"title":"ComputerScreenshotImageType"}},"title":"ComputerScreenshotImage"},"status":{"oneOf":[{"type":"null"},{"description":"The status of the message input. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when input items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]}},"title":"ComputerCallOutputItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer_call_output"]}}}],"description":"The output of a computer tool call."},{"allOf":[{"description":"The results of a web search tool call. See the\n[web search guide](https://platform.openai.com/docs/guides/tools-web-search) for more information.","type":"object","required":["action","id","status"],"properties":{"action":{"description":"An object describing the specific action taken in this web search call. Includes\ndetails on how the model used the web (search, open_page, find).","oneOf":[{"allOf":[{"description":"Action type \"search\" - Performs a web search query.","type":"object","required":["query"],"properties":{"query":{"type":"string","description":"The search query."},"sources":{"type":["array","null"],"items":{"type":"object","required":["type","url"],"properties":{"type":{"type":"string","description":"The type of source. Always `url`."},"url":{"type":"string","description":"The URL of the source."}},"title":"WebSearchActionSearchSource"},"description":"The sources used in the search."}},"title":"WebSearchActionSearch"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["search"]}}}],"description":"Action type \"search\" - Performs a web search query."},{"allOf":[{"description":"Action type \"open_page\" - Opens a specific URL from search results.","type":"object","required":["url"],"properties":{"url":{"type":"string","description":"The URL opened by the model."}},"title":"WebSearchActionOpenPage"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["open_page"]}}}],"description":"Action type \"open_page\" - Opens a specific URL from search results."},{"allOf":[{"description":"Action type \"find\": Searches for a pattern within a loaded page.","type":"object","required":["url","pattern"],"properties":{"pattern":{"type":"string","description":"The pattern or text to search for within the page."},"url":{"type":"string","description":"The URL of the page searched for the pattern."}},"title":"WebSearchActionFind"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["find"]}}}],"description":"Action type \"find\": Searches for a pattern within a loaded page."}],"title":"WebSearchToolCallAction"},"id":{"type":"string","description":"The unique ID of the web search tool call."},"status":{"description":"The status of the web search tool call.","type":"string","enum":["in_progress","searching","completed","failed"],"title":"WebSearchToolCallStatus"}},"title":"WebSearchToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_call"]}}}],"description":"The results of a web search tool call. See the\n[web search guide](https://platform.openai.com/docs/guides/tools-web-search) for more information."},{"allOf":[{"description":"A tool call to run a function. See the\n\n[function calling guide](https://platform.openai.com/docs/guides/function-calling) for more information.","type":"object","required":["arguments","call_id","name"],"properties":{"arguments":{"type":"string","description":"A JSON string of the arguments to pass to the function."},"call_id":{"type":"string","description":"The unique ID of the function tool call generated by the model."},"id":{"type":["string","null"],"description":"The unique ID of the function tool call."},"name":{"type":"string","description":"The name of the function to run."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]}},"title":"FunctionToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function_call"]}}}],"description":"A tool call to run a function. See the\n\n[function calling guide](https://platform.openai.com/docs/guides/function-calling) for more information."},{"allOf":[{"description":"The output of a function tool call.","type":"object","required":["call_id","output"],"properties":{"call_id":{"type":"string","description":"The unique ID of the function tool call generated by the model."},"id":{"type":["string","null"],"description":"The unique ID of the function tool call output.\nPopulated when this item is returned via API."},"output":{"description":"Text, image, or file output of the function tool call.","oneOf":[{"type":"string","description":"A JSON string of the output of the function tool call."},{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A text input to the model.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text input to the model."}},"title":"InputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_text"]}}}],"description":"A text input to the model."},{"allOf":[{"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision).","type":"object","required":["detail"],"properties":{"detail":{"description":"The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`.\nDefaults to `auto`.","type":"string","enum":["auto","low","high"],"title":"ImageDetail"},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"image_url":{"type":["string","null"],"description":"The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image\nin a data URL."}},"title":"InputImageContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_image"]}}}],"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision)."},{"allOf":[{"description":"A file input to the model.","type":"object","properties":{"file_data":{"type":["string","null"],"description":"The content of the file to be sent to the model."},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"file_url":{"type":["string","null"],"description":"The URL of the file to be sent to the model."},"filename":{"type":["string","null"],"description":"The name of the file to be sent to the model."}},"title":"InputFileContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_file"]}}}],"description":"A file input to the model."}],"description":"Parts of a message: text, image, file, or audio.","title":"InputContent"}}],"title":"FunctionCallOutput"},"status":{"oneOf":[{"type":"null"},{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]}},"title":"FunctionCallOutputItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function_call_output"]}}}],"description":"The output of a function tool call."},{"allOf":[{"description":"A description of the chain of thought used by a reasoning model while generating\na response. Be sure to include these items in your `input` to the Responses API\nfor subsequent turns of a conversation if you are manually\n[managing context](https://platform.openai.com/docs/guides/conversation-state).","type":"object","required":["id","summary"],"properties":{"content":{"type":["array","null"],"items":{"type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The reasoning text from the model."}},"title":"ReasoningTextContent"},"description":"Reasoning text content."},"encrypted_content":{"type":["string","null"],"description":"The encrypted content of the reasoning item - populated when a response is generated with\n`reasoning.encrypted_content` in the `include` parameter."},"id":{"type":"string","description":"Unique identifier of the reasoning content."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]},"summary":{"type":"array","items":{"oneOf":[{"allOf":[{"type":"object","description":"A single summary text fragment from reasoning.","required":["text"],"properties":{"text":{"type":"string","description":"A summary of the reasoning output from the model so far."}},"title":"Summary"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["summary_text"]}}}]}],"title":"SummaryPart"},"description":"Reasoning summary content."}},"title":"ReasoningItem"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["reasoning"]}}}],"description":"A description of the chain of thought used by a reasoning model while generating\na response. Be sure to include these items in your `input` to the Responses API\nfor subsequent turns of a conversation if you are manually\n[managing context](https://platform.openai.com/docs/guides/conversation-state)."},{"allOf":[{"description":"A compaction item generated by the [`v1/responses/compact` API](https://platform.openai.com/docs/api-reference/responses/compact).","type":"object","required":["encrypted_content"],"properties":{"encrypted_content":{"type":"string","description":"The encrypted content."},"id":{"type":["string","null"],"description":"The ID of the compaction item."}},"title":"CompactionSummaryItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["compaction"]}}}],"description":"A compaction item generated by the [`v1/responses/compact` API](https://platform.openai.com/docs/api-reference/responses/compact)."},{"allOf":[{"description":"An image generation request made by the model.","type":"object","required":["id","status"],"properties":{"id":{"type":"string","description":"The unique ID of the image generation call."},"result":{"type":["string","null"],"description":"The generated image encoded in base64."},"status":{"description":"The status of the image generation call.","type":"string","enum":["in_progress","completed","generating","failed"],"title":"ImageGenToolCallStatus"}},"title":"ImageGenToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["image_generation_call"]}}}],"description":"An image generation request made by the model."},{"allOf":[{"description":"A tool call to run code.","type":"object","required":["container_id","id","status"],"properties":{"code":{"type":["string","null"],"description":"The code to run, or null if not available."},"container_id":{"type":"string","description":"ID of the container used to run the code."},"id":{"type":"string","description":"The unique ID of the code interpreter tool call."},"outputs":{"type":["array","null"],"items":{"oneOf":[{"allOf":[{"description":"Code interpreter output logs","type":"object","required":["logs"],"properties":{"logs":{"type":"string","description":"The logs output from the code interpreter."}},"title":"CodeInterpreterOutputLogs"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["logs"]}}}],"description":"Code interpreter output logs"},{"allOf":[{"description":"Code interpreter output image","type":"object","required":["url"],"properties":{"url":{"type":"string","description":"The URL of the image output from the code interpreter."}},"title":"CodeInterpreterOutputImage"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["image"]}}}],"description":"Code interpreter output image"}],"description":"Individual result from a code interpreter: either logs or files.","title":"CodeInterpreterToolCallOutput"},"description":"The outputs generated by the code interpreter, such as logs or images.\nCan be null if no outputs are available."},"status":{"description":"The status of the code interpreter tool call.\nValid values are `in_progress`, `completed`, `incomplete`, `interpreting`, and `failed`.","type":"string","enum":["in_progress","completed","incomplete","interpreting","failed"],"title":"CodeInterpreterToolCallStatus"}},"title":"CodeInterpreterToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["code_interpreter_call"]}}}],"description":"A tool call to run code."},{"allOf":[{"description":"A tool call to run a command on the local shell.","type":"object","required":["action","call_id","id","status"],"properties":{"action":{"description":"Execute a shell command on the server.","type":"object","required":["command","env"],"properties":{"command":{"type":"array","items":{"type":"string"},"description":"The command to run."},"env":{"type":"object","description":"Environment variables to set for the command.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"timeout_ms":{"type":["integer","null"],"format":"int64","description":"Optional timeout in milliseconds for the command.","minimum":0},"user":{"type":["string","null"],"description":"Optional user to run the command as."},"working_directory":{"type":["string","null"],"description":"Optional working directory to run the command in."}},"title":"LocalShellExecAction"},"call_id":{"type":"string","description":"The unique ID of the local shell tool call generated by the model."},"id":{"type":"string","description":"The unique ID of the local shell call."},"status":{"description":"The status of the local shell call.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}},"title":"LocalShellToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["local_shell_call"]}}}],"description":"A tool call to run a command on the local shell."},{"allOf":[{"description":"The output of a local shell tool call.","type":"object","required":["id","output"],"properties":{"id":{"type":"string","description":"The unique ID of the local shell tool call generated by the model."},"output":{"type":"string","description":"A JSON string of the output of the local shell tool call."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]}},"title":"LocalShellToolCallOutput"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["local_shell_call_output"]}}}],"description":"The output of a local shell tool call."},{"allOf":[{"description":"A tool representing a request to execute one or more shell commands.","type":"object","required":["call_id","action"],"properties":{"action":{"description":"The shell commands and limits that describe how to run the tool call.","type":"object","required":["commands"],"properties":{"commands":{"type":"array","items":{"type":"string"},"description":"Ordered shell commands for the execution environment to run."},"max_output_length":{"type":["integer","null"],"format":"int64","description":"Maximum number of UTF-8 characters to capture from combined stdout and stderr output.","minimum":0},"timeout_ms":{"type":["integer","null"],"format":"int64","description":"Maximum wall-clock time in milliseconds to allow the shell commands to run.","minimum":0}},"title":"FunctionShellActionParam"},"call_id":{"type":"string","description":"The unique ID of the shell tool call generated by the model."},"id":{"type":["string","null"],"description":"The unique ID of the shell tool call. Populated when this item is returned via API."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the shell call. One of `in_progress`, `completed`, or `incomplete`.","type":"string","enum":["in_progress","completed","incomplete"],"title":"FunctionShellCallItemStatus"}]}},"title":"FunctionShellCallItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["shell_call"]}}}],"description":"A tool representing a request to execute one or more shell commands."},{"allOf":[{"description":"The streamed output items emitted by a shell tool call.","type":"object","required":["call_id","output"],"properties":{"call_id":{"type":"string","description":"The unique ID of the shell tool call generated by the model."},"id":{"type":["string","null"],"description":"The unique ID of the shell tool call output. Populated when this item is returned via API."},"max_output_length":{"type":["integer","null"],"format":"int64","description":"The maximum number of UTF-8 characters captured for this shell call's combined output.","minimum":0},"output":{"type":"array","items":{"type":"object","description":"Captured stdout and stderr for a portion of a shell tool call output.","required":["stdout","stderr","outcome"],"properties":{"outcome":{"description":"The exit or timeout outcome associated with this chunk.","oneOf":[{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["timeout"]}}},{"allOf":[{"type":"object","description":"Indicates that the shell commands finished and returned an exit code.","required":["exit_code"],"properties":{"exit_code":{"type":"integer","format":"int32","description":"The exit code returned by the shell process."}},"title":"FunctionShellCallOutputExitOutcomeParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["exit"]}}}]}],"title":"FunctionShellCallOutputOutcomeParam"},"stderr":{"type":"string","description":"Captured stderr output for this chunk of the shell call."},"stdout":{"type":"string","description":"Captured stdout output for this chunk of the shell call."}},"title":"FunctionShellCallOutputContentParam"},"description":"Captured chunks of stdout and stderr output, along with their associated outcomes."}},"title":"FunctionShellCallOutputItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["shell_call_output"]}}}],"description":"The streamed output items emitted by a shell tool call."},{"allOf":[{"description":"A tool call representing a request to create, delete, or update files using diff patches.","type":"object","required":["call_id","status","operation"],"properties":{"call_id":{"type":"string","description":"The unique ID of the apply patch tool call generated by the model."},"id":{"type":["string","null"],"description":"The unique ID of the apply patch tool call. Populated when this item is returned via API."},"operation":{"description":"The specific create, delete, or update instruction for the apply_patch tool call.","oneOf":[{"allOf":[{"type":"object","description":"Instruction for creating a new file via the apply_patch tool.","required":["path","diff"],"properties":{"diff":{"type":"string","description":"Unified diff content to apply when creating the file."},"path":{"type":"string","description":"Path of the file to create relative to the workspace root."}},"title":"ApplyPatchCreateFileOperationParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["create_file"]}}}]},{"allOf":[{"type":"object","description":"Instruction for deleting an existing file via the apply_patch tool.","required":["path"],"properties":{"path":{"type":"string","description":"Path of the file to delete relative to the workspace root."}},"title":"ApplyPatchDeleteFileOperationParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["delete_file"]}}}]},{"allOf":[{"type":"object","description":"Instruction for updating an existing file via the apply_patch tool.","required":["path","diff"],"properties":{"diff":{"type":"string","description":"Unified diff content to apply to the existing file."},"path":{"type":"string","description":"Path of the file to update relative to the workspace root."}},"title":"ApplyPatchUpdateFileOperationParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["update_file"]}}}]}],"title":"ApplyPatchOperationParam"},"status":{"description":"The status of the apply patch tool call. One of `in_progress` or `completed`.","type":"string","enum":["in_progress","completed"],"title":"ApplyPatchCallStatusParam"}},"title":"ApplyPatchToolCallItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["apply_patch_call"]}}}],"description":"A tool call representing a request to create, delete, or update files using diff patches."},{"allOf":[{"description":"The streamed output emitted by an apply patch tool call.","type":"object","required":["call_id","status"],"properties":{"call_id":{"type":"string","description":"The unique ID of the apply patch tool call generated by the model."},"id":{"type":["string","null"],"description":"The unique ID of the apply patch tool call output. Populated when this item is returned via API."},"output":{"type":["string","null"],"description":"Optional human-readable log text from the apply patch tool (e.g., patch results or errors)."},"status":{"description":"The status of the apply patch tool call output. One of `completed` or `failed`.","type":"string","enum":["completed","failed"],"title":"ApplyPatchCallOutputStatusParam"}},"title":"ApplyPatchToolCallOutputItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["apply_patch_call_output"]}}}],"description":"The streamed output emitted by an apply patch tool call."},{"allOf":[{"description":"A list of tools available on an MCP server.","type":"object","required":["id","server_label","tools"],"properties":{"error":{"type":["string","null"],"description":"Error message if listing failed."},"id":{"type":"string","description":"The unique ID of the list."},"server_label":{"type":"string","description":"The label of the MCP server."},"tools":{"type":"array","items":{"type":"object","required":["input_schema","name"],"properties":{"annotations":{"description":"Additional annotations about the tool."},"description":{"type":["string","null"],"description":"The description of the tool."},"input_schema":{"description":"The JSON schema describing the tool's input."},"name":{"type":"string","description":"The name of the tool."}},"title":"MCPListToolsTool"},"description":"The tools available on the server."}},"title":"MCPListTools"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp_list_tools"]}}}],"description":"A list of tools available on an MCP server."},{"allOf":[{"description":"A request for human approval of a tool invocation.","type":"object","required":["arguments","id","name","server_label"],"properties":{"arguments":{"type":"string","description":"JSON string of arguments for the tool."},"id":{"type":"string","description":"The unique ID of the approval request."},"name":{"type":"string","description":"The name of the tool to run."},"server_label":{"type":"string","description":"The label of the MCP server making the request."}},"title":"MCPApprovalRequest"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp_approval_request"]}}}],"description":"A request for human approval of a tool invocation."},{"allOf":[{"description":"A response to an MCP approval request.","type":"object","required":["approval_request_id","approve"],"properties":{"approval_request_id":{"type":"string","description":"The ID of the approval request being answered."},"approve":{"type":"boolean","description":"Whether the request was approved."},"id":{"type":["string","null"],"description":"The unique ID of the approval response"},"reason":{"type":["string","null"],"description":"Optional reason for the decision."}},"title":"MCPApprovalResponse"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp_approval_response"]}}}],"description":"A response to an MCP approval request."},{"allOf":[{"description":"An invocation of a tool on an MCP server.","type":"object","required":["arguments","id","name","server_label"],"properties":{"approval_request_id":{"type":["string","null"],"description":"Unique identifier for the MCP tool call approval request. Include this value\nin a subsequent `mcp_approval_response` input to approve or reject the corresponding\ntool call."},"arguments":{"type":"string","description":"A JSON string of the arguments passed to the tool."},"error":{"type":["string","null"],"description":"Error message from the call, if any."},"id":{"type":"string","description":"The unique ID of the tool call."},"name":{"type":"string","description":"The name of the tool that was run."},"output":{"type":["string","null"],"description":"The output from the tool call."},"server_label":{"type":"string","description":"The label of the MCP server running the tool."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the tool call. One of `in_progress`, `completed`, `incomplete`,\n`calling`, or `failed`.","type":"string","enum":["in_progress","completed","incomplete","calling","failed"],"title":"MCPToolCallStatus"}]}},"title":"MCPToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp_call"]}}}],"description":"An invocation of a tool on an MCP server."},{"allOf":[{"description":"The output of a custom tool call from your code, being sent back to the model.","type":"object","required":["call_id","output"],"properties":{"call_id":{"type":"string","description":"The call ID, used to map this custom tool call output to a custom tool call."},"id":{"type":["string","null"],"description":"The unique ID of the custom tool call output in the OpenAI platform."},"output":{"description":"The output from the custom tool call generated by your code.\nCan be a string or an list of output content.","oneOf":[{"type":"string","description":"A string of the output of the custom tool call."},{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A text input to the model.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text input to the model."}},"title":"InputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_text"]}}}],"description":"A text input to the model."},{"allOf":[{"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision).","type":"object","required":["detail"],"properties":{"detail":{"description":"The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`.\nDefaults to `auto`.","type":"string","enum":["auto","low","high"],"title":"ImageDetail"},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"image_url":{"type":["string","null"],"description":"The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image\nin a data URL."}},"title":"InputImageContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_image"]}}}],"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision)."},{"allOf":[{"description":"A file input to the model.","type":"object","properties":{"file_data":{"type":["string","null"],"description":"The content of the file to be sent to the model."},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"file_url":{"type":["string","null"],"description":"The URL of the file to be sent to the model."},"filename":{"type":["string","null"],"description":"The name of the file to be sent to the model."}},"title":"InputFileContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_file"]}}}],"description":"A file input to the model."}],"description":"Parts of a message: text, image, file, or audio.","title":"InputContent"},"description":"Text, image, or file output of the custom tool call."}],"title":"CustomToolCallOutputOutput"}},"title":"CustomToolCallOutput"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom_tool_call_output"]}}}],"description":"The output of a custom tool call from your code, being sent back to the model."},{"allOf":[{"description":"A call to a custom tool created by the model.","type":"object","required":["call_id","input","name","id"],"properties":{"call_id":{"type":"string","description":"An identifier used to map this custom tool call to a tool call output."},"id":{"type":"string","description":"The unique ID of the custom tool call in the OpenAI platform."},"input":{"type":"string","description":"The input for the custom tool call generated by the model."},"name":{"type":"string","description":"The name of the custom tool being called."}},"title":"CustomToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom_tool_call"]}}}],"description":"A call to a custom tool created by the model."}],"title":"Item"},{"description":"A simple, user-friendly message input (EasyInputMessage).\nSupports string content and can include assistant role for previous responses.\nMust be tried last as it's the most flexible structure.\n\nA message input to the model with a role indicating instruction following\nhierarchy. Instructions given with the `developer` or `system` role take\nprecedence over instructions given with the `user` role. Messages with the\n`assistant` role are presumed to have been generated by the model in previous\ninteractions.","type":"object","required":["type","role","content"],"properties":{"content":{"description":"Text, image, or audio input to the model, used to generate a response.\nCan also contain previous assistant responses.","oneOf":[{"type":"string","description":"A text input to the model."},{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A text input to the model.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text input to the model."}},"title":"InputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_text"]}}}],"description":"A text input to the model."},{"allOf":[{"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision).","type":"object","required":["detail"],"properties":{"detail":{"description":"The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`.\nDefaults to `auto`.","type":"string","enum":["auto","low","high"],"title":"ImageDetail"},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"image_url":{"type":["string","null"],"description":"The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image\nin a data URL."}},"title":"InputImageContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_image"]}}}],"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision)."},{"allOf":[{"description":"A file input to the model.","type":"object","properties":{"file_data":{"type":["string","null"],"description":"The content of the file to be sent to the model."},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"file_url":{"type":["string","null"],"description":"The URL of the file to be sent to the model."},"filename":{"type":["string","null"],"description":"The name of the file to be sent to the model."}},"title":"InputFileContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_file"]}}}],"description":"A file input to the model."}],"description":"Parts of a message: text, image, file, or audio.","title":"InputContent"},"description":"A list of one or many input items to the model, containing different content types."}],"title":"EasyInputContent"},"role":{"description":"The role of the message input. One of `user`, `assistant`, `system`, or `developer`.","type":"string","enum":["user","assistant","system","developer"],"title":"Role"},"type":{"description":"The type of the message input. Always set to `message`.","type":"string","enum":["message"],"title":"MessageType"}},"title":"EasyInputMessage"}],"description":"Input item that can be used in the context for generating a response.\n\nThis represents the OpenAPI `InputItem` schema which is an `anyOf`:\n1. `EasyInputMessage` - Simple, user-friendly message input (can use string content)\n2. `Item` - Structured items with proper type discrimination (including InputMessage, OutputMessage, tool calls)\n3. `ItemReferenceParam` - Reference to an existing item by ID (type can be null)\n\nUses untagged deserialization because these types overlap in structure.\nOrder matters: more specific structures are tried first.\n\n# OpenAPI Specification\nCorresponds to the `InputItem` schema: `anyOf[EasyInputMessage, Item, ItemReferenceParam]`","title":"InputItem"},"description":"A list of one or many input items to the model, containing different content types."}],"title":"Instructions"}]},"max_output_tokens":{"type":["integer","null"],"format":"int32","description":"An upper bound for the number of tokens that can be generated for a response,\nincluding visible output tokens and\n[reasoning tokens](https://platform.openai.com/docs/guides/reasoning).","minimum":0},"metadata":{"type":["object","null"],"description":"Set of 16 key-value pairs that can be attached to an object. This can be\nuseful for storing additional information about the object in a structured\nformat, and querying for objects via API or the dashboard.\n\nKeys are strings with a maximum length of 64 characters. Values are strings\nwith a maximum length of 512 characters.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"model":{"type":"string","description":"Model ID used to generate the response, like gpt-4o or o3. OpenAI offers a\nwide range of models with different capabilities, performance characteristics,\nand price points. Refer to the [model guide](https://platform.openai.com/docs/models) to browse and compare available models."},"object":{"type":"string","description":"The object type of this resource - always set to `response`."},"output":{"type":"array","items":{"oneOf":[{"allOf":[{"description":"An output message from the model.","type":"object","required":["content","id","role","status"],"properties":{"content":{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A text output from the model.","type":"object","required":["annotations","text"],"properties":{"annotations":{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A citation to a file.","type":"object","required":["file_id","filename","index"],"properties":{"file_id":{"type":"string","description":"The ID of the file."},"filename":{"type":"string","description":"The filename of the file cited."},"index":{"type":"integer","format":"int32","description":"The index of the file in the list of files.","minimum":0}},"title":"FileCitationBody"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_citation"]}}}],"description":"A citation to a file."},{"allOf":[{"description":"A citation for a web resource used to generate a model response.","type":"object","required":["end_index","start_index","title","url"],"properties":{"end_index":{"type":"integer","format":"int32","description":"The index of the last character of the URL citation in the message.","minimum":0},"start_index":{"type":"integer","format":"int32","description":"The index of the first character of the URL citation in the message.","minimum":0},"title":{"type":"string","description":"The title of the web resource."},"url":{"type":"string","description":"The URL of the web resource."}},"title":"UrlCitationBody"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["url_citation"]}}}],"description":"A citation for a web resource used to generate a model response."},{"allOf":[{"description":"A citation for a container file used to generate a model response.","type":"object","required":["container_id","end_index","file_id","filename","start_index"],"properties":{"container_id":{"type":"string","description":"The ID of the container file."},"end_index":{"type":"integer","format":"int32","description":"The index of the last character of the container file citation in the message.","minimum":0},"file_id":{"type":"string","description":"The ID of the file."},"filename":{"type":"string","description":"The filename of the container file cited."},"start_index":{"type":"integer","format":"int32","description":"The index of the first character of the container file citation in the message.","minimum":0}},"title":"ContainerFileCitationBody"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["container_file_citation"]}}}],"description":"A citation for a container file used to generate a model response."},{"allOf":[{"description":"A path to a file.","type":"object","required":["file_id","index"],"properties":{"file_id":{"type":"string","description":"The ID of the file."},"index":{"type":"integer","format":"int32","description":"The index of the file in the list of files.","minimum":0}},"title":"FilePath"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_path"]}}}],"description":"A path to a file."}],"title":"Annotation"},"description":"The annotations of the text output."},"logprobs":{"type":["array","null"],"items":{"type":"object","required":["bytes","logprob","token","top_logprobs"],"properties":{"bytes":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"logprob":{"type":"number","format":"double"},"token":{"type":"string"},"top_logprobs":{"type":"array","items":{"type":"object","required":["bytes","logprob","token"],"properties":{"bytes":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"logprob":{"type":"number","format":"double"},"token":{"type":"string"}},"title":"TopLogProb"}}},"title":"LogProb"}},"text":{"type":"string","description":"The text output from the model."}},"title":"OutputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["output_text"]}}}],"description":"A text output from the model."},{"allOf":[{"description":"A refusal from the model.","type":"object","required":["refusal"],"properties":{"refusal":{"type":"string","description":"The refusal explanation from the model."}},"title":"RefusalContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["refusal"]}}}],"description":"A refusal from the model."}],"title":"OutputMessageContent"},"description":"The content of the output message."},"id":{"type":"string","description":"The unique ID of the output message."},"role":{"description":"The role of the output message. Always `assistant`.","type":"string","enum":["assistant"],"title":"AssistantRole"},"status":{"description":"The status of the message input. One of `in_progress`, `completed`, or\n`incomplete`. Populated when input items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}},"title":"OutputMessage"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["message"]}}}],"description":"An output message from the model."},{"allOf":[{"description":"The results of a file search tool call. See the\n[file search guide](https://platform.openai.com/docs/guides/tools-file-search)\nfor more information.","type":"object","required":["id","queries","status"],"properties":{"id":{"type":"string","description":"The unique ID of the file search tool call."},"queries":{"type":"array","items":{"type":"string"},"description":"The queries used to search for files."},"results":{"type":["array","null"],"items":{"type":"object","description":"A single result from a file search.","required":["attributes","file_id","filename","score","text"],"properties":{"attributes":{"type":"object","description":"Set of 16 key-value pairs that can be attached to an object. This can be useful for storing\nadditional information about the object in a structured format, and querying for objects\nAPI or the dashboard. Keys are strings with a maximum length of 64 characters\n. Values are strings with a maximum length of 512 characters, booleans, or numbers.","additionalProperties":{},"propertyNames":{"type":"string"}},"file_id":{"type":"string","description":"The unique ID of the file."},"filename":{"type":"string","description":"The name of the file."},"score":{"type":"number","format":"float","description":"The relevance score of the file - a value between 0 and 1."},"text":{"type":"string","description":"The text that was retrieved from the file."}},"title":"FileSearchToolCallResult"},"description":"The results of the file search tool call."},"status":{"description":"The status of the file search tool call. One of `in_progress`, `searching`,\n`incomplete`,`failed`, or `completed`.","type":"string","enum":["in_progress","searching","incomplete","failed","completed"],"title":"FileSearchToolCallStatus"}},"title":"FileSearchToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_search_call"]}}}],"description":"The results of a file search tool call. See the\n[file search guide](https://platform.openai.com/docs/guides/tools-file-search)\nfor more information."},{"allOf":[{"description":"A tool call to run a function. See the\n[function calling guide](https://platform.openai.com/docs/guides/function-calling)\nfor more information.","type":"object","required":["arguments","call_id","name"],"properties":{"arguments":{"type":"string","description":"A JSON string of the arguments to pass to the function."},"call_id":{"type":"string","description":"The unique ID of the function tool call generated by the model."},"id":{"type":["string","null"],"description":"The unique ID of the function tool call."},"name":{"type":"string","description":"The name of the function to run."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]}},"title":"FunctionToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function_call"]}}}],"description":"A tool call to run a function. See the\n[function calling guide](https://platform.openai.com/docs/guides/function-calling)\nfor more information."},{"allOf":[{"description":"The results of a web search tool call. See the\n[web search guide](https://platform.openai.com/docs/guides/tools-web-search)\nfor more information.","type":"object","required":["action","id","status"],"properties":{"action":{"description":"An object describing the specific action taken in this web search call. Includes\ndetails on how the model used the web (search, open_page, find).","oneOf":[{"allOf":[{"description":"Action type \"search\" - Performs a web search query.","type":"object","required":["query"],"properties":{"query":{"type":"string","description":"The search query."},"sources":{"type":["array","null"],"items":{"type":"object","required":["type","url"],"properties":{"type":{"type":"string","description":"The type of source. Always `url`."},"url":{"type":"string","description":"The URL of the source."}},"title":"WebSearchActionSearchSource"},"description":"The sources used in the search."}},"title":"WebSearchActionSearch"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["search"]}}}],"description":"Action type \"search\" - Performs a web search query."},{"allOf":[{"description":"Action type \"open_page\" - Opens a specific URL from search results.","type":"object","required":["url"],"properties":{"url":{"type":"string","description":"The URL opened by the model."}},"title":"WebSearchActionOpenPage"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["open_page"]}}}],"description":"Action type \"open_page\" - Opens a specific URL from search results."},{"allOf":[{"description":"Action type \"find\": Searches for a pattern within a loaded page.","type":"object","required":["url","pattern"],"properties":{"pattern":{"type":"string","description":"The pattern or text to search for within the page."},"url":{"type":"string","description":"The URL of the page searched for the pattern."}},"title":"WebSearchActionFind"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["find"]}}}],"description":"Action type \"find\": Searches for a pattern within a loaded page."}],"title":"WebSearchToolCallAction"},"id":{"type":"string","description":"The unique ID of the web search tool call."},"status":{"description":"The status of the web search tool call.","type":"string","enum":["in_progress","searching","completed","failed"],"title":"WebSearchToolCallStatus"}},"title":"WebSearchToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_call"]}}}],"description":"The results of a web search tool call. See the\n[web search guide](https://platform.openai.com/docs/guides/tools-web-search)\nfor more information."},{"allOf":[{"description":"A tool call to a computer use tool. See the\n[computer use guide](https://platform.openai.com/docs/guides/tools-computer-use)\nfor more information.","type":"object","required":["action","call_id","id","pending_safety_checks","status"],"properties":{"action":{"oneOf":[{"allOf":[{"description":"A click action.","type":"object","required":["button","x","y"],"properties":{"button":{"description":"Indicates which mouse button was pressed during the click. One of `left`,\n`right`, `wheel`, `back`, or `forward`.","type":"string","enum":["left","right","wheel","back","forward"],"title":"ClickButtonType"},"x":{"type":"integer","format":"int32","description":"The x-coordinate where the click occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the click occurred."}},"title":"ClickParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["click"]}}}],"description":"A click action."},{"allOf":[{"description":"A double click action.","type":"object","required":["x","y"],"properties":{"x":{"type":"integer","format":"int32","description":"The x-coordinate where the double click occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the double click occurred."}},"title":"DoubleClickAction"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["double_click"]}}}],"description":"A double click action."},{"allOf":[{"description":"A drag action.","type":"object","required":["path"],"properties":{"path":{"type":"array","items":{"type":"object","description":"A point in 2D space.","required":["x","y"],"properties":{"x":{"type":"integer","format":"int32","description":"The x-coordinate."},"y":{"type":"integer","format":"int32","description":"The y-coordinate."}},"title":"DragPoint"},"description":"The path of points the cursor drags through."}},"title":"Drag"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["drag"]}}}],"description":"A drag action."},{"allOf":[{"description":"A collection of keypresses the model would like to perform.","type":"object","required":["keys"],"properties":{"keys":{"type":"array","items":{"type":"string"},"description":"The combination of keys the model is requesting to be pressed.\nThis is an array of strings, each representing a key."}},"title":"KeyPressAction"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["keypress"]}}}],"description":"A collection of keypresses the model would like to perform."},{"allOf":[{"description":"A mouse move action.","type":"object","required":["x","y"],"properties":{"x":{"type":"integer","format":"int32","description":"The x-coordinate to move to."},"y":{"type":"integer","format":"int32","description":"The y-coordinate to move to."}},"title":"Move"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["move"]}}}],"description":"A mouse move action."},{"type":"object","description":"A screenshot action.","required":["type"],"properties":{"type":{"type":"string","enum":["screenshot"]}}},{"allOf":[{"description":"A scroll action.","type":"object","required":["scroll_x","scroll_y","x","y"],"properties":{"scroll_x":{"type":"integer","format":"int32","description":"The horizontal scroll distance."},"scroll_y":{"type":"integer","format":"int32","description":"The vertical scroll distance."},"x":{"type":"integer","format":"int32","description":"The x-coordinate where the scroll occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the scroll occurred."}},"title":"Scroll"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["scroll"]}}}],"description":"A scroll action."},{"allOf":[{"description":"An action to type in text.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text to type."}},"title":"Type"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["type"]}}}],"description":"An action to type in text."},{"type":"object","description":"A wait action.","required":["type"],"properties":{"type":{"type":"string","enum":["wait"]}}}],"description":"Represents all user‐triggered actions.","title":"ComputerAction"},"call_id":{"type":"string","description":"An identifier used when responding to the tool call with output."},"id":{"type":"string","description":"The unique ID of the computer call."},"pending_safety_checks":{"type":"array","items":{"type":"object","required":["id"],"properties":{"code":{"type":["string","null"],"description":"The type of the pending safety check."},"id":{"type":"string","description":"The ID of the pending safety check."},"message":{"type":["string","null"],"description":"Details about the pending safety check."}},"title":"ComputerCallSafetyCheckParam"},"description":"The pending safety checks for the computer call."},"status":{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}},"title":"ComputerToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer_call"]}}}],"description":"A tool call to a computer use tool. See the\n[computer use guide](https://platform.openai.com/docs/guides/tools-computer-use)\nfor more information."},{"allOf":[{"description":"A description of the chain of thought used by a reasoning model while generating\na response. Be sure to include these items in your `input` to the Responses API for\nsubsequent turns of a conversation if you are manually\n[managing context](https://platform.openai.com/docs/guides/conversation-state).","type":"object","required":["id","summary"],"properties":{"content":{"type":["array","null"],"items":{"type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The reasoning text from the model."}},"title":"ReasoningTextContent"},"description":"Reasoning text content."},"encrypted_content":{"type":["string","null"],"description":"The encrypted content of the reasoning item - populated when a response is generated with\n`reasoning.encrypted_content` in the `include` parameter."},"id":{"type":"string","description":"Unique identifier of the reasoning content."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]},"summary":{"type":"array","items":{"oneOf":[{"allOf":[{"type":"object","description":"A single summary text fragment from reasoning.","required":["text"],"properties":{"text":{"type":"string","description":"A summary of the reasoning output from the model so far."}},"title":"Summary"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["summary_text"]}}}]}],"title":"SummaryPart"},"description":"Reasoning summary content."}},"title":"ReasoningItem"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["reasoning"]}}}],"description":"A description of the chain of thought used by a reasoning model while generating\na response. Be sure to include these items in your `input` to the Responses API for\nsubsequent turns of a conversation if you are manually\n[managing context](https://platform.openai.com/docs/guides/conversation-state)."},{"allOf":[{"description":"A compaction item generated by the [`v1/responses/compact` API](https://platform.openai.com/docs/api-reference/responses/compact).","type":"object","required":["id","encrypted_content"],"properties":{"created_by":{"type":["string","null"],"description":"Created by model/user identifier."},"encrypted_content":{"type":"string","description":"The encrypted content."},"id":{"type":"string","description":"The unique ID of the compaction item."}},"title":"CompactionBody"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["compaction"]}}}],"description":"A compaction item generated by the [`v1/responses/compact` API](https://platform.openai.com/docs/api-reference/responses/compact)."},{"allOf":[{"description":"An image generation request made by the model.","type":"object","required":["id","status"],"properties":{"id":{"type":"string","description":"The unique ID of the image generation call."},"result":{"type":["string","null"],"description":"The generated image encoded in base64."},"status":{"description":"The status of the image generation call.","type":"string","enum":["in_progress","completed","generating","failed"],"title":"ImageGenToolCallStatus"}},"title":"ImageGenToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["image_generation_call"]}}}],"description":"An image generation request made by the model."},{"allOf":[{"description":"A tool call to run code.","type":"object","required":["container_id","id","status"],"properties":{"code":{"type":["string","null"],"description":"The code to run, or null if not available."},"container_id":{"type":"string","description":"ID of the container used to run the code."},"id":{"type":"string","description":"The unique ID of the code interpreter tool call."},"outputs":{"type":["array","null"],"items":{"oneOf":[{"allOf":[{"description":"Code interpreter output logs","type":"object","required":["logs"],"properties":{"logs":{"type":"string","description":"The logs output from the code interpreter."}},"title":"CodeInterpreterOutputLogs"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["logs"]}}}],"description":"Code interpreter output logs"},{"allOf":[{"description":"Code interpreter output image","type":"object","required":["url"],"properties":{"url":{"type":"string","description":"The URL of the image output from the code interpreter."}},"title":"CodeInterpreterOutputImage"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["image"]}}}],"description":"Code interpreter output image"}],"description":"Individual result from a code interpreter: either logs or files.","title":"CodeInterpreterToolCallOutput"},"description":"The outputs generated by the code interpreter, such as logs or images.\nCan be null if no outputs are available."},"status":{"description":"The status of the code interpreter tool call.\nValid values are `in_progress`, `completed`, `incomplete`, `interpreting`, and `failed`.","type":"string","enum":["in_progress","completed","incomplete","interpreting","failed"],"title":"CodeInterpreterToolCallStatus"}},"title":"CodeInterpreterToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["code_interpreter_call"]}}}],"description":"A tool call to run code."},{"allOf":[{"description":"A tool call to run a command on the local shell.","type":"object","required":["action","call_id","id","status"],"properties":{"action":{"description":"Execute a shell command on the server.","type":"object","required":["command","env"],"properties":{"command":{"type":"array","items":{"type":"string"},"description":"The command to run."},"env":{"type":"object","description":"Environment variables to set for the command.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"timeout_ms":{"type":["integer","null"],"format":"int64","description":"Optional timeout in milliseconds for the command.","minimum":0},"user":{"type":["string","null"],"description":"Optional user to run the command as."},"working_directory":{"type":["string","null"],"description":"Optional working directory to run the command in."}},"title":"LocalShellExecAction"},"call_id":{"type":"string","description":"The unique ID of the local shell tool call generated by the model."},"id":{"type":"string","description":"The unique ID of the local shell call."},"status":{"description":"The status of the local shell call.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}},"title":"LocalShellToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["local_shell_call"]}}}],"description":"A tool call to run a command on the local shell."},{"allOf":[{"description":"A tool call that executes one or more shell commands in a managed environment.","type":"object","required":["id","call_id","action","status"],"properties":{"action":{"description":"The shell commands and limits that describe how to run the tool call.","type":"object","required":["commands"],"properties":{"commands":{"type":"array","items":{"type":"string"},"description":"A list of commands to run."},"max_output_length":{"type":["integer","null"],"format":"int64","description":"Optional maximum number of characters to return from each command.","minimum":0},"timeout_ms":{"type":["integer","null"],"format":"int64","description":"Optional timeout in milliseconds for the commands.","minimum":0}},"title":"FunctionShellAction"},"call_id":{"type":"string","description":"The unique ID of the function shell tool call generated by the model."},"created_by":{"type":["string","null"],"description":"The ID of the entity that created this tool call."},"id":{"type":"string","description":"The unique ID of the function shell tool call. Populated when this item is returned via API."},"status":{"description":"The status of the shell call. One of `in_progress`, `completed`, or `incomplete`.","type":"string","enum":["in_progress","completed","incomplete"],"title":"LocalShellCallStatus"}},"title":"FunctionShellCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["shell_call"]}}}],"description":"A tool call that executes one or more shell commands in a managed environment."},{"allOf":[{"description":"The output of a shell tool call.","type":"object","required":["id","call_id","output"],"properties":{"call_id":{"type":"string","description":"The unique ID of the shell tool call generated by the model."},"created_by":{"type":["string","null"]},"id":{"type":"string","description":"The unique ID of the shell call output. Populated when this item is returned via API."},"max_output_length":{"type":["integer","null"],"format":"int64","description":"The maximum length of the shell command output. This is generated by the model and should be\npassed back with the raw output.","minimum":0},"output":{"type":"array","items":{"allOf":[{"description":"Represents either an exit outcome (with an exit code) or a timeout outcome for a shell call output chunk.","oneOf":[{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["timeout"]}}},{"allOf":[{"type":"object","description":"Indicates that the shell commands finished and returned an exit code.","required":["exit_code"],"properties":{"exit_code":{"type":"integer","format":"int32","description":"Exit code from the shell process."}},"title":"FunctionShellCallOutputExitOutcome"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["exit"]}}}]}],"title":"FunctionShellCallOutputOutcome"},{"type":"object","required":["stdout","stderr"],"properties":{"created_by":{"type":["string","null"]},"stderr":{"type":"string"},"stdout":{"type":"string"}}}],"description":"The content of a shell call output.","title":"FunctionShellCallOutputContent"},"description":"An array of shell call output contents"}},"title":"FunctionShellCallOutput"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["shell_call_output"]}}}],"description":"The output of a shell tool call."},{"allOf":[{"description":"A tool call that applies file diffs by creating, deleting, or updating files.","type":"object","required":["id","call_id","status","operation"],"properties":{"call_id":{"type":"string","description":"The unique ID of the apply patch tool call generated by the model."},"created_by":{"type":["string","null"],"description":"The ID of the entity that created this tool call."},"id":{"type":"string","description":"The unique ID of the apply patch tool call. Populated when this item is returned via API."},"operation":{"description":"One of the create_file, delete_file, or update_file operations applied via apply_patch.","oneOf":[{"allOf":[{"type":"object","description":"Instruction describing how to create a file via the apply_patch tool.","required":["path","diff"],"properties":{"diff":{"type":"string","description":"Diff to apply."},"path":{"type":"string","description":"Path of the file to create."}},"title":"ApplyPatchCreateFileOperation"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["create_file"]}}}]},{"allOf":[{"type":"object","description":"Instruction describing how to delete a file via the apply_patch tool.","required":["path"],"properties":{"path":{"type":"string","description":"Path of the file to delete."}},"title":"ApplyPatchDeleteFileOperation"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["delete_file"]}}}]},{"allOf":[{"type":"object","description":"Instruction describing how to update a file via the apply_patch tool.","required":["path","diff"],"properties":{"diff":{"type":"string","description":"Diff to apply."},"path":{"type":"string","description":"Path of the file to update."}},"title":"ApplyPatchUpdateFileOperation"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["update_file"]}}}]}],"title":"ApplyPatchOperation"},"status":{"description":"The status of the apply patch tool call. One of `in_progress` or `completed`.","type":"string","enum":["in_progress","completed"],"title":"ApplyPatchCallStatus"}},"title":"ApplyPatchToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["apply_patch_call"]}}}],"description":"A tool call that applies file diffs by creating, deleting, or updating files."},{"allOf":[{"description":"The output emitted by an apply patch tool call.","type":"object","required":["id","call_id","status"],"properties":{"call_id":{"type":"string","description":"The unique ID of the apply patch tool call generated by the model."},"created_by":{"type":["string","null"],"description":"The ID of the entity that created this tool call output."},"id":{"type":"string","description":"The unique ID of the apply patch tool call output. Populated when this item is returned via API."},"output":{"type":["string","null"],"description":"Optional textual output returned by the apply patch tool."},"status":{"description":"The status of the apply patch tool call output. One of `completed` or `failed`.","type":"string","enum":["completed","failed"],"title":"ApplyPatchCallOutputStatus"}},"title":"ApplyPatchToolCallOutput"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["apply_patch_call_output"]}}}],"description":"The output emitted by an apply patch tool call."},{"allOf":[{"description":"An invocation of a tool on an MCP server.","type":"object","required":["arguments","id","name","server_label"],"properties":{"approval_request_id":{"type":["string","null"],"description":"Unique identifier for the MCP tool call approval request. Include this value\nin a subsequent `mcp_approval_response` input to approve or reject the corresponding\ntool call."},"arguments":{"type":"string","description":"A JSON string of the arguments passed to the tool."},"error":{"type":["string","null"],"description":"Error message from the call, if any."},"id":{"type":"string","description":"The unique ID of the tool call."},"name":{"type":"string","description":"The name of the tool that was run."},"output":{"type":["string","null"],"description":"The output from the tool call."},"server_label":{"type":"string","description":"The label of the MCP server running the tool."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the tool call. One of `in_progress`, `completed`, `incomplete`,\n`calling`, or `failed`.","type":"string","enum":["in_progress","completed","incomplete","calling","failed"],"title":"MCPToolCallStatus"}]}},"title":"MCPToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp_call"]}}}],"description":"An invocation of a tool on an MCP server."},{"allOf":[{"description":"A list of tools available on an MCP server.","type":"object","required":["id","server_label","tools"],"properties":{"error":{"type":["string","null"],"description":"Error message if listing failed."},"id":{"type":"string","description":"The unique ID of the list."},"server_label":{"type":"string","description":"The label of the MCP server."},"tools":{"type":"array","items":{"type":"object","required":["input_schema","name"],"properties":{"annotations":{"description":"Additional annotations about the tool."},"description":{"type":["string","null"],"description":"The description of the tool."},"input_schema":{"description":"The JSON schema describing the tool's input."},"name":{"type":"string","description":"The name of the tool."}},"title":"MCPListToolsTool"},"description":"The tools available on the server."}},"title":"MCPListTools"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp_list_tools"]}}}],"description":"A list of tools available on an MCP server."},{"allOf":[{"description":"A request for human approval of a tool invocation.","type":"object","required":["arguments","id","name","server_label"],"properties":{"arguments":{"type":"string","description":"JSON string of arguments for the tool."},"id":{"type":"string","description":"The unique ID of the approval request."},"name":{"type":"string","description":"The name of the tool to run."},"server_label":{"type":"string","description":"The label of the MCP server making the request."}},"title":"MCPApprovalRequest"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp_approval_request"]}}}],"description":"A request for human approval of a tool invocation."},{"allOf":[{"description":"A call to a custom tool created by the model.","type":"object","required":["call_id","input","name","id"],"properties":{"call_id":{"type":"string","description":"An identifier used to map this custom tool call to a tool call output."},"id":{"type":"string","description":"The unique ID of the custom tool call in the OpenAI platform."},"input":{"type":"string","description":"The input for the custom tool call generated by the model."},"name":{"type":"string","description":"The name of the custom tool being called."}},"title":"CustomToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom_tool_call"]}}}],"description":"A call to a custom tool created by the model."}],"description":"Output item","title":"OutputItem"},"description":"An array of content items generated by the model.\n\n- The length and order of items in the output array is dependent on the model's response.\n- Rather than accessing the first item in the output array and assuming it's an assistant\n message with the content generated by the model, you might consider using\n the `output_text` property where supported in SDKs."},"parallel_tool_calls":{"type":["boolean","null"],"description":"SDK-only convenience property that contains the aggregated text output from all\n`output_text` items in the `output` array, if any are present.\nSupported in the Python and JavaScript SDKs.\nWhether to allow the model to run tool calls in parallel."},"previous_response_id":{"type":["string","null"],"description":"The unique ID of the previous response to the model. Use this to create multi-turn conversations.\nLearn more about [conversation state](https://platform.openai.com/docs/guides/conversation-state).\nCannot be used in conjunction with `conversation`."},"prompt":{"oneOf":[{"type":"null"},{"description":"Reference to a prompt template and its variables.\n[Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts).","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The unique identifier of the prompt template to use."},"variables":{"oneOf":[{"type":"null"},{"description":"Optional map of values to substitute in for variables in your\nprompt. The substitution values can either be strings, or other\nResponse input types like images or files.","oneOf":[{"type":"string"},{"oneOf":[{"allOf":[{"description":"A text input to the model.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text input to the model."}},"title":"InputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_text"]}}}],"description":"A text input to the model."},{"allOf":[{"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision).","type":"object","required":["detail"],"properties":{"detail":{"description":"The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`.\nDefaults to `auto`.","type":"string","enum":["auto","low","high"],"title":"ImageDetail"},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"image_url":{"type":["string","null"],"description":"The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image\nin a data URL."}},"title":"InputImageContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_image"]}}}],"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision)."},{"allOf":[{"description":"A file input to the model.","type":"object","properties":{"file_data":{"type":["string","null"],"description":"The content of the file to be sent to the model."},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"file_url":{"type":["string","null"],"description":"The URL of the file to be sent to the model."},"filename":{"type":["string","null"],"description":"The name of the file to be sent to the model."}},"title":"InputFileContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_file"]}}}],"description":"A file input to the model."}],"description":"Parts of a message: text, image, file, or audio.","title":"InputContent"},{}],"title":"ResponsePromptVariables"}]},"version":{"type":["string","null"],"description":"Optional version of the prompt template."}},"title":"Prompt"}]},"prompt_cache_key":{"type":["string","null"],"description":"Used by OpenAI to cache responses for similar requests to optimize your cache hit rates. Replaces\nthe `user` field. [Learn more](https://platform.openai.com/docs/guides/prompt-caching)."},"prompt_cache_retention":{"oneOf":[{"type":"null"},{"description":"The retention policy for the prompt cache. Set to `24h` to enable extended prompt caching,\nwhich keeps cached prefixes active for longer, up to a maximum of 24 hours. [Learn\nmore](https://platform.openai.com/docs/guides/prompt-caching#prompt-cache-retention).","type":"string","enum":["in-memory","24h"],"title":"PromptCacheRetention"}]},"reasoning":{"oneOf":[{"type":"null"},{"description":"**gpt-5 and o-series models only**\nConfiguration options for [reasoning models](https://platform.openai.com/docs/guides/reasoning).","type":"object","properties":{"effort":{"oneOf":[{"type":"null"},{"description":"Constrains effort on reasoning for\n[reasoning models](https://platform.openai.com/docs/guides/reasoning).\nCurrently supported values are `minimal`, `low`, `medium`, and `high`. Reducing\nreasoning effort can result in faster responses and fewer tokens used\non reasoning in a response.\n\nNote: The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort.","type":"string","enum":["none","minimal","low","medium","high","xhigh"],"title":"ReasoningEffort"}]},"summary":{"oneOf":[{"type":"null"},{"description":"A summary of the reasoning performed by the model. This can be\nuseful for debugging and understanding the model's reasoning process.\nOne of `auto`, `concise`, or `detailed`.\n\n`concise` is supported for `computer-use-preview` models and all reasoning models after\n`gpt-5`.","type":"string","enum":["auto","concise","detailed"],"title":"ReasoningSummary"}]}},"title":"Reasoning"}]},"safety_identifier":{"type":["string","null"],"description":"A stable identifier used to help detect users of your application that may be violating OpenAI's\nusage policies.\n\nThe IDs should be a string that uniquely identifies each user. We recommend hashing their username\nor email address, in order to avoid sending us any identifying information. [Learn\nmore](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers)."},"service_tier":{"oneOf":[{"type":"null"},{"description":"Specifies the processing type used for serving the request.\n- If set to 'auto', then the request will be processed with the service tier configured in the Project settings. Unless otherwise configured, the Project will use 'default'.\n- If set to 'default', then the request will be processed with the standard pricing and performance for the selected model.\n- If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or '[priority](https://openai.com/api-priority-processing/)', then the request will be processed with the corresponding service tier.\n- When not set, the default behavior is 'auto'.\n\nWhen the `service_tier` parameter is set, the response body will include the `service_tier` value based on the processing mode actually used to serve the request. This response value may be different from the value set in the parameter.","type":"string","enum":["auto","default","flex","scale","priority"],"title":"ServiceTier"}]},"status":{"description":"The status of the response generation.\nOne of `completed`, `failed`, `in_progress`, `cancelled`, `queued`, or `incomplete`.","type":"string","enum":["completed","failed","in_progress","cancelled","queued","incomplete"],"title":"Status"},"temperature":{"type":["number","null"],"format":"float","description":"What sampling temperature was used, between 0 and 2. Higher values like 0.8 make\noutputs more random, lower values like 0.2 make output more focused and deterministic.\n\nWe generally recommend altering this or `top_p` but not both."},"text":{"oneOf":[{"type":"null"},{"description":"Configuration options for a text response from the model. Can be plain\ntext or structured JSON data. Learn more:\n- [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n- [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)","type":"object","required":["format"],"properties":{"format":{"description":"An object specifying the format that the model must output.\n\nConfiguring `{ \"type\": \"json_schema\" }` enables Structured Outputs,\nwhich ensures the model will match your supplied JSON schema. Learn more in the\n[Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs).\n\nThe default format is `{ \"type\": \"text\" }` with no additional options.\n\n**Not recommended for gpt-4o and newer models:**\n\nSetting to `{ \"type\": \"json_object\" }` enables the older JSON mode, which\nensures the message the model generates is valid JSON. Using `json_schema`\nis preferred for models that support it.","oneOf":[{"type":"object","description":"Default response format. Used to generate text responses.","required":["type"],"properties":{"type":{"type":"string","enum":["text"]}}},{"type":"object","description":"JSON object response format. An older method of generating JSON responses.\nUsing `json_schema` is recommended for models that support it.\nNote that the model will not generate JSON without a system or user message\ninstructing it to do so.","required":["type"],"properties":{"type":{"type":"string","enum":["json_object"]}}},{"allOf":[{"description":"JSON Schema response format. Used to generate structured JSON responses.\nLearn more about [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs).","type":"object","required":["name"],"properties":{"description":{"type":["string","null"],"description":"A description of what the response format is for, used by the model to determine how to respond in the format."},"name":{"type":"string","description":"The name of the response format. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64."},"schema":{"description":"The schema for the response format, described as a JSON Schema object.\nLearn how to build JSON schemas [here](https://json-schema.org/)."},"strict":{"type":["boolean","null"],"description":"Whether to enable strict schema adherence when generating the output.\nIf set to true, the model will always follow the exact schema defined\nin the `schema` field. Only a subset of JSON Schema is supported when\n`strict` is `true`. To learn more, read the [Structured Outputs\nguide](https://platform.openai.com/docs/guides/structured-outputs)."}},"title":"ResponseFormatJsonSchema"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["json_schema"]}}}],"description":"JSON Schema response format. Used to generate structured JSON responses.\nLearn more about [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)."}],"title":"TextResponseFormatConfiguration"},"verbosity":{"oneOf":[{"type":"null"},{"description":"Constrains the verbosity of the model's response. Lower values will result in\nmore concise responses, while higher values will result in more verbose responses.\n\nCurrently supported values are `low`, `medium`, and `high`.","type":"string","enum":["low","medium","high"],"title":"Verbosity"}]}},"title":"ResponseTextParam"}]},"tool_choice":{"oneOf":[{"type":"null"},{"description":"How the model should select which tool (or tools) to use when generating\na response. See the `tools` parameter to see how to specify which tools\nthe model can call.","oneOf":[{"allOf":[{"description":"Constrains the tools available to the model to a pre-defined set.","type":"object","required":["mode","tools"],"properties":{"mode":{"description":"Constrains the tools available to the model to a pre-defined set.\n\n`auto` allows the model to pick from among the allowed tools and generate a\nmessage.\n\n`required` requires the model to call one or more of the allowed tools.","type":"string","enum":["auto","required"],"title":"ToolChoiceAllowedMode"},"tools":{"type":"array","items":{},"description":"A list of tool definitions that the model should be allowed to call.\n\nFor the Responses API, the list of tool definitions might look like:\n```json\n[\n { \"type\": \"function\", \"name\": \"get_weather\" },\n { \"type\": \"mcp\", \"server_label\": \"deepwiki\" },\n { \"type\": \"image_generation\" }\n]\n```"}},"title":"ToolChoiceAllowed"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["allowed_tools"]}}}],"description":"Constrains the tools available to the model to a pre-defined set."},{"allOf":[{"description":"Use this option to force the model to call a specific function.","type":"object","required":["name"],"properties":{"name":{"type":"string","description":"The name of the function to call."}},"title":"ToolChoiceFunction"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function"]}}}],"description":"Use this option to force the model to call a specific function."},{"allOf":[{"description":"Use this option to force the model to call a specific tool on a remote MCP server.","type":"object","required":["name","server_label"],"properties":{"name":{"type":"string","description":"The name of the tool to call on the server."},"server_label":{"type":"string","description":"The label of the MCP server to use."}},"title":"ToolChoiceMCP"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp"]}}}],"description":"Use this option to force the model to call a specific tool on a remote MCP server."},{"allOf":[{"description":"Use this option to force the model to call a custom tool.","type":"object","required":["name"],"properties":{"name":{"type":"string","description":"The name of the custom tool to call."}},"title":"ToolChoiceCustom"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom"]}}}],"description":"Use this option to force the model to call a custom tool."},{"type":"object","description":"Forces the model to call the apply_patch tool when executing a tool call.","required":["type"],"properties":{"type":{"type":"string","enum":["apply_patch"]}}},{"type":"object","description":"Forces the model to call the function shell tool when a tool call is required.","required":["type"],"properties":{"type":{"type":"string","enum":["shell"]}}},{"allOf":[{"description":"Indicates that the model should use a built-in tool to generate a response.\n[Learn more about built-in tools](https://platform.openai.com/docs/guides/tools).","oneOf":[{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_search"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_preview"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer_use_preview"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["code_interpreter"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["image_generation"]}}}],"title":"ToolChoiceTypes"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["hosted"]}}}],"description":"Indicates that the model should use a built-in tool to generate a response.\n[Learn more about built-in tools](https://platform.openai.com/docs/guides/tools)."},{"allOf":[{"description":"Controls which (if any) tool is called by the model.\n\n`none` means the model will not call any tool and instead generates a message.\n\n`auto` means the model can pick between generating a message or calling one or\nmore tools.\n\n`required` means the model must call one or more tools.","type":"string","enum":["none","auto","required"],"title":"ToolChoiceOptions"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mode"]}}}],"description":"Controls which (if any) tool is called by the model.\n\n`none` means the model will not call any tool and instead generates a message.\n\n`auto` means the model can pick between generating a message or calling one or\nmore tools.\n\n`required` means the model must call one or more tools."}],"title":"ToolChoiceParam"}]},"tools":{"type":["array","null"],"items":{"oneOf":[{"allOf":[{"description":"Defines a function in your own code the model can choose to call. Learn more about [function\ncalling](https://platform.openai.com/docs/guides/tools).","type":"object","required":["name"],"properties":{"description":{"type":["string","null"],"description":"A description of the function. Used by the model to determine whether or not to call the\nfunction."},"name":{"type":"string","description":"The name of the function to call."},"parameters":{"description":"A JSON schema object describing the parameters of the function."},"strict":{"type":["boolean","null"],"description":"Whether to enforce strict parameter validation. Default `true`."}},"title":"FunctionTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function"]}}}],"description":"Defines a function in your own code the model can choose to call. Learn more about [function\ncalling](https://platform.openai.com/docs/guides/tools)."},{"allOf":[{"description":"A tool that searches for relevant content from uploaded files. Learn more about the [file search\ntool](https://platform.openai.com/docs/guides/tools-file-search).","type":"object","required":["vector_store_ids"],"properties":{"filters":{"oneOf":[{"type":"null"},{"description":"A filter to apply.","oneOf":[{"description":"A filter used to compare a specified attribute key to a given value using a defined\ncomparison operation.","type":"object","required":["type","key","value"],"properties":{"key":{"type":"string","description":"The key to compare against the value."},"type":{"description":"Specifies the comparison operator: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`.\n- `eq`: equals\n- `ne`: not equal\n- `gt`: greater than\n- `gte`: greater than or equal\n- `lt`: less than\n- `lte`: less than or equal\n- `in`: in\n- `nin`: not in","type":"string","enum":["eq","ne","gt","gte","lt","lte","in","nin"],"title":"ComparisonType"},"value":{"description":"The value to compare against the attribute key; supports string, number, or boolean types."}},"title":"ComparisonFilter"},{"description":"Combine multiple filters using `and` or `or`.","type":"object","required":["type","filters"],"properties":{"filters":{"type":"array","items":{"oneOf":"circular()","description":"Filters for file search.","title":"Filter"},"description":"Array of filters to combine. Items can be ComparisonFilter or CompoundFilter."},"type":{"type":"string","enum":["and","or"],"description":"'Type of operation: `and` or `or`.'"}},"title":"CompoundFilter"}],"title":"Filter"}]},"max_num_results":{"type":["integer","null"],"format":"int32","description":"The maximum number of results to return. This number should be between 1 and 50 inclusive.","minimum":0},"ranking_options":{"oneOf":[{"type":"null"},{"description":"Ranking options for search.","type":"object","required":["ranker"],"properties":{"hybrid_search":{"oneOf":[{"type":"null"},{"description":"Weights that control how reciprocal rank fusion balances semantic embedding matches versus\nsparse keyword matches when hybrid search is enabled.","type":"object","required":["embedding_weight","text_weight"],"properties":{"embedding_weight":{"type":"number","format":"float","description":"The weight of the embedding in the reciprocal ranking fusion."},"text_weight":{"type":"number","format":"float","description":"The weight of the text in the reciprocal ranking fusion."}},"title":"HybridSearch"}]},"ranker":{"description":"The ranker to use for the file search.","type":"string","enum":["auto","default-2024-11-15"],"title":"RankVersionType"},"score_threshold":{"type":["number","null"],"format":"float","description":"The score threshold for the file search, a number between 0 and 1. Numbers closer to 1 will\nattempt to return only the most relevant results, but may return fewer results."}},"title":"RankingOptions"}]},"vector_store_ids":{"type":"array","items":{"type":"string"},"description":"The IDs of the vector stores to search."}},"title":"FileSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_search"]}}}],"description":"A tool that searches for relevant content from uploaded files. Learn more about the [file search\ntool](https://platform.openai.com/docs/guides/tools-file-search)."},{"allOf":[{"description":"A tool that controls a virtual computer. Learn more about the [computer\nuse tool](https://platform.openai.com/docs/guides/tools-computer-use).","type":"object","required":["environment","display_width","display_height"],"properties":{"display_height":{"type":"integer","format":"int32","description":"The height of the computer display.","minimum":0},"display_width":{"type":"integer","format":"int32","description":"The width of the computer display.","minimum":0},"environment":{"description":"The type of computer environment to control.","type":"string","enum":["windows","mac","linux","ubuntu","browser"],"title":"ComputerEnvironment"}},"title":"ComputerUsePreviewTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer_use_preview"]}}}],"description":"A tool that controls a virtual computer. Learn more about the [computer\nuse tool](https://platform.openai.com/docs/guides/tools-computer-use)."},{"allOf":[{"description":"Search the Internet for sources related to the prompt. Learn more about the\n[web search tool](https://platform.openai.com/docs/guides/tools-web-search).","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","required":["type"],"properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Always `approximate`.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search"]}}}],"description":"Search the Internet for sources related to the prompt. Learn more about the\n[web search tool](https://platform.openai.com/docs/guides/tools-web-search)."},{"allOf":[{"description":"type: web_search_2025_08_26","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","required":["type"],"properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Always `approximate`.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_2025_08_26"]}}}],"description":"type: web_search_2025_08_26"},{"allOf":[{"description":"Give the model access to additional tools via remote Model Context Protocol\n(MCP) servers. [Learn more about MCP](https://platform.openai.com/docs/guides/tools-remote-mcp).","type":"object","required":["server_label"],"properties":{"allowed_tools":{"oneOf":[{"type":"null"},{"description":"List of allowed tool names or a filter object.","oneOf":[{"type":"array","items":{"type":"string"},"description":"A string array of allowed tool names"},{"description":"A filter object to specify which tools are allowed.","type":"object","properties":{"read_only":{"type":["boolean","null"],"description":"Indicates whether or not a tool modifies data or is read-only.\nIf an MCP server is annotated with [readOnlyHint](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\nit will match this filter."},"tool_names":{"type":["array","null"],"items":{"type":"string"},"description":"List of allowed tool names."}},"title":"MCPToolFilter"}],"title":"MCPToolAllowedTools"}]},"authorization":{"type":["string","null"],"description":"An OAuth access token that can be used with a remote MCP server, either with a custom MCP\nserver URL or a service connector. Your application must handle the OAuth authorization\nflow and provide the token here."},"connector_id":{"oneOf":[{"type":"null"},{"description":"Identifier for service connectors, like those available in ChatGPT. One of `server_url` or\n`connector_id` must be provided. Learn more about service connectors [here](https://platform.openai.com/docs/guides/tools-remote-mcp#connectors).\n\nCurrently supported `connector_id` values are:\n- Dropbox: `connector_dropbox`\n- Gmail: `connector_gmail`\n- Google Calendar: `connector_googlecalendar`\n- Google Drive: `connector_googledrive`\n- Microsoft Teams: `connector_microsoftteams`\n- Outlook Calendar: `connector_outlookcalendar`\n- Outlook Email: `connector_outlookemail`\n- SharePoint: `connector_sharepoint`","type":"string","enum":["connector_dropbox","connector_gmail","connector_googlecalendar","connector_googledrive","connector_microsoftteams","connector_outlookcalendar","connector_outlookemail","connector_sharepoint"],"title":"McpToolConnectorId"}]},"headers":{"description":"Optional HTTP headers to send to the MCP server. Use for authentication or other purposes."},"require_approval":{"oneOf":[{"type":"null"},{"description":"Specify which of the MCP server's tools require approval.","oneOf":[{"description":"Specify which of the MCP server's tools require approval. Can be\n`always`, `never`, or a filter object associated with tools\nthat require approval.","type":"object","properties":{"always":{"oneOf":[{"type":"null"},{"description":"A list of tools that always require approval.","type":"object","properties":{"read_only":{"type":["boolean","null"],"description":"Indicates whether or not a tool modifies data or is read-only.\nIf an MCP server is annotated with [readOnlyHint](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\nit will match this filter."},"tool_names":{"type":["array","null"],"items":{"type":"string"},"description":"List of allowed tool names."}},"title":"MCPToolFilter"}]},"never":{"oneOf":[{"type":"null"},{"description":"A list of tools that never require approval.","type":"object","properties":{"read_only":{"type":["boolean","null"],"description":"Indicates whether or not a tool modifies data or is read-only.\nIf an MCP server is annotated with [readOnlyHint](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\nit will match this filter."},"tool_names":{"type":["array","null"],"items":{"type":"string"},"description":"List of allowed tool names."}},"title":"MCPToolFilter"}]}},"title":"MCPToolApprovalFilter"},{"description":"Specify a single approval policy for all tools. One of `always` or\n`never`. When set to `always`, all tools will require approval. When\nset to `never`, all tools will not require approval.","type":"string","enum":["always","never"],"title":"MCPToolApprovalSetting"}],"title":"MCPToolRequireApproval"}]},"server_description":{"type":["string","null"],"description":"Optional description of the MCP server, used to provide more context."},"server_label":{"type":"string","description":"A label for this MCP server, used to identify it in tool calls."},"server_url":{"type":["string","null"],"description":"The URL for the MCP server. One of `server_url` or `connector_id` must be provided."}},"title":"MCPTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp"]}}}],"description":"Give the model access to additional tools via remote Model Context Protocol\n(MCP) servers. [Learn more about MCP](https://platform.openai.com/docs/guides/tools-remote-mcp)."},{"allOf":[{"description":"A tool that runs Python code to help generate a response to a prompt.","type":"object","required":["container"],"properties":{"container":{"description":"The code interpreter container. Can be a container ID or an object that\nspecifies uploaded file IDs to make available to your code, along with an\noptional `memory_limit` setting.","oneOf":[{"allOf":[{"description":"Configuration for a code interpreter container. Optionally specify the IDs of the\nfiles to run the code on.","type":"object","properties":{"file_ids":{"type":["array","null"],"items":{"type":"string"},"description":"An optional list of uploaded files to make available to your code."},"memory_limit":{"type":["integer","null"],"format":"int64","minimum":0}},"title":"CodeInterpreterContainerAuto"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["auto"]}}}],"description":"Configuration for a code interpreter container. Optionally specify the IDs of the\nfiles to run the code on."},{"type":"object","description":"The container ID.","required":["type"],"properties":{"type":{"type":"string","enum":["container_i_d"]}}}],"title":"CodeInterpreterToolContainer"}},"title":"CodeInterpreterTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["code_interpreter"]}}}],"description":"A tool that runs Python code to help generate a response to a prompt."},{"allOf":[{"description":"A tool that generates images using a model like `gpt-image-1`.","type":"object","properties":{"background":{"oneOf":[{"type":"null"},{"description":"Background type for the generated image. One of `transparent`,\n`opaque`, or `auto`. Default: `auto`.","type":"string","enum":["transparent","opaque","auto"],"title":"ImageGenToolBackground"}]},"input_fidelity":{"oneOf":[{"type":"null"},{"description":"Control how much effort the model will exert to match the style and features, especially facial features,\nof input images. This parameter is only supported for `gpt-image-1`. Unsupported\nfor `gpt-image-1-mini`. Supports `high` and `low`. Defaults to `low`.","type":"string","enum":["high","low"],"title":"InputFidelity"}]},"input_image_mask":{"oneOf":[{"type":"null"},{"description":"Optional mask for inpainting. Contains `image_url`\n(string, optional) and `file_id` (string, optional).","type":"object","properties":{"file_id":{"type":["string","null"],"description":"File ID for the mask image."},"image_url":{"type":["string","null"],"description":"Base64-encoded mask image."}},"title":"ImageGenToolInputImageMask"}]},"model":{"type":["string","null"],"description":"The image generation model to use. Default: `gpt-image-1`."},"moderation":{"oneOf":[{"type":"null"},{"description":"Moderation level for the generated image. Default: `auto`.","type":"string","enum":["auto","low"],"title":"ImageGenToolModeration"}]},"output_compression":{"type":["integer","null"],"format":"int32","description":"Compression level for the output image. Default: 100.","minimum":0},"output_format":{"oneOf":[{"type":"null"},{"description":"The output format of the generated image. One of `png`, `webp`, or\n`jpeg`. Default: `png`.","type":"string","enum":["png","webp","jpeg"],"title":"ImageGenToolOutputFormat"}]},"partial_images":{"type":["integer","null"],"format":"int32","description":"Number of partial images to generate in streaming mode, from 0 (default value) to 3.","minimum":0},"quality":{"oneOf":[{"type":"null"},{"description":"The quality of the generated image. One of `low`, `medium`, `high`,\nor `auto`. Default: `auto`.","type":"string","enum":["low","medium","high","auto"],"title":"ImageGenToolQuality"}]},"size":{"oneOf":[{"type":"null"},{"description":"The size of the generated image. One of `1024x1024`, `1024x1536`,\n`1536x1024`, or `auto`. Default: `auto`.","type":"string","enum":["auto","1024x1024","1024x1536","1536x1024"],"title":"ImageGenToolSize"}]}},"title":"ImageGenTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["image_generation"]}}}],"description":"A tool that generates images using a model like `gpt-image-1`."},{"type":"object","description":"A tool that allows the model to execute shell commands in a local environment.","required":["type"],"properties":{"type":{"type":"string","enum":["local_shell"]}}},{"type":"object","description":"A tool that allows the model to execute shell commands.","required":["type"],"properties":{"type":{"type":"string","enum":["shell"]}}},{"allOf":[{"description":"A custom tool that processes input using a specified format. Learn more about [custom\ntools](https://platform.openai.com/docs/guides/function-calling#custom-tools)","type":"object","required":["name","format"],"properties":{"description":{"type":["string","null"],"description":"Optional description of the custom tool, used to provide more context."},"format":{"description":"The input format for the custom tool. Default is unconstrained text.","oneOf":[{"type":"object","description":"Unconstrained free-form text.","required":["type"],"properties":{"type":{"type":"string","enum":["text"]}}},{"allOf":[{"description":"A grammar defined by the user.","type":"object","required":["definition","syntax"],"properties":{"definition":{"type":"string","description":"The grammar definition."},"syntax":{"description":"The syntax of the grammar definition. One of `lark` or `regex`.","type":"string","enum":["lark","regex"],"title":"GrammarSyntax"}},"title":"CustomGrammarFormatParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["grammar"]}}}],"description":"A grammar defined by the user."}],"title":"CustomToolParamFormat"},"name":{"type":"string","description":"The name of the custom tool, used to identify it in tool calls."}},"title":"CustomToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom"]}}}],"description":"A custom tool that processes input using a specified format. Learn more about [custom\ntools](https://platform.openai.com/docs/guides/function-calling#custom-tools)"},{"allOf":[{"description":" This tool searches the web for relevant results to use in a response. Learn more about the [web search\ntool](https://platform.openai.com/docs/guides/tools-web-search).","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","required":["type"],"properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Always `approximate`.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_preview"]}}}],"description":" This tool searches the web for relevant results to use in a response. Learn more about the [web search\ntool](https://platform.openai.com/docs/guides/tools-web-search)."},{"allOf":[{"description":"type: web_search_preview_2025_03_11","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","required":["type"],"properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Always `approximate`.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_preview_2025_03_11"]}}}],"description":"type: web_search_preview_2025_03_11"},{"type":"object","description":"Allows the assistant to create, delete, or update files using unified diffs.","required":["type"],"properties":{"type":{"type":"string","enum":["apply_patch"]}}}],"description":"Definitions for model-callable tools.","title":"Tool"},"description":"An array of tools the model may call while generating a response. You\ncan specify which tool to use by setting the `tool_choice` parameter.\n\nWe support the following categories of tools:\n- **Built-in tools**: Tools that are provided by OpenAI that extend the\n model's capabilities, like [web search](https://platform.openai.com/docs/guides/tools-web-search)\n or [file search](https://platform.openai.com/docs/guides/tools-file-search). Learn more about\n [built-in tools](https://platform.openai.com/docs/guides/tools).\n- **MCP Tools**: Integrations with third-party systems via custom MCP servers\n or predefined connectors such as Google Drive and SharePoint. Learn more about\n [MCP Tools](https://platform.openai.com/docs/guides/tools-connectors-mcp).\n- **Function calls (custom tools)**: Functions that are defined by you,\n enabling the model to call your own code with strongly typed arguments\n and outputs. Learn more about\n [function calling](https://platform.openai.com/docs/guides/function-calling). You can also use\n custom tools to call your own code."},"top_logprobs":{"type":["integer","null"],"format":"int32","description":"An integer between 0 and 20 specifying the number of most likely tokens to return at each\ntoken position, each with an associated log probability.","minimum":0},"top_p":{"type":["number","null"],"format":"float","description":"An alternative to sampling with temperature, called nucleus sampling,\nwhere the model considers the results of the tokens with top_p probability\nmass. So 0.1 means only the tokens comprising the top 10% probability mass\nare considered.\n\nWe generally recommend altering this or `temperature` but not both."},"truncation":{"oneOf":[{"type":"null"},{"description":"The truncation strategy to use for the model response.\n - `auto`: If the input to this Response exceeds\n the model's context window size, the model will truncate the\n response to fit the context window by dropping items from the beginning of the conversation.\n - `disabled` (default): If the input size will exceed the context window\n size for a model, the request will fail with a 400 error.","type":"string","enum":["auto","disabled"],"title":"Truncation"}]},"usage":{"oneOf":[{"type":"null"},{"description":"Represents token usage details including input tokens, output tokens,\na breakdown of output tokens, and the total tokens used.","type":"object","required":["input_tokens","input_tokens_details","output_tokens","output_tokens_details","total_tokens"],"properties":{"input_tokens":{"type":"integer","format":"int32","description":"The number of input tokens.","minimum":0},"input_tokens_details":{"description":"A detailed breakdown of the input tokens.","type":"object","required":["cached_tokens"],"properties":{"cached_tokens":{"type":"integer","format":"int32","description":"The number of tokens that were retrieved from the cache.\n[More on prompt caching](https://platform.openai.com/docs/guides/prompt-caching).","minimum":0}},"title":"InputTokenDetails"},"output_tokens":{"type":"integer","format":"int32","description":"The number of output tokens.","minimum":0},"output_tokens_details":{"description":"A detailed breakdown of the output tokens.","type":"object","required":["reasoning_tokens"],"properties":{"reasoning_tokens":{"type":"integer","format":"int32","description":"The number of reasoning tokens.","minimum":0}},"title":"OutputTokenDetails"},"total_tokens":{"type":"integer","format":"int32","description":"The total number of tokens used.","minimum":0}},"title":"ResponseUsage"}]}},"title":"Response"},"example":{"created_at":1755639134,"id":"resp_68a4ed5e2258819485ece563a803bbf2075163a5e5b1c982","metadata":{},"model":"test","object":"response","output":[{"type":"message","content":[{"type":"output_text","annotations":[],"text":"Thank you! How can I assist you today?"}],"id":"msg_68a4ed5eb7e88194bf0b2560d8b5c0c1075163a5e5b1c982","role":"assistant","status":"completed"}],"parallel_tool_calls":true,"reasoning":{},"store":true,"service_tier":"default","status":"completed","temperature":1,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[],"top_p":1,"truncation":"disabled","usage":{"input_tokens":13,"input_tokens_details":{"audio_tokens":null,"cached_tokens":0},"output_tokens":11,"output_tokens_details":{"accepted_prediction_tokens":null,"audio_tokens":null,"reasoning_tokens":0,"rejected_prediction_tokens":null},"total_tokens":24}}}}},"404":{"description":"The specified model was not found"},"500":{"description":"An internal server error occurred while processing the response","content":{"application/json":{"schema":{},"example":{"error":"An internal server error occurred while processing the response."}}}}}} \ No newline at end of file +{"responses":{"200":{"description":"Response generated successfully","content":{"application/json":{"schema":{"type":"object","description":"The complete response returned by the Responses API.","required":["created_at","id","model","object","output","status"],"properties":{"background":{"type":["boolean","null"],"description":"Whether to run the model response in the background.\n[Learn more](https://platform.openai.com/docs/guides/background)."},"billing":{"oneOf":[{"type":"null"},{"description":"Billing information for the response.","type":"object","required":["payer"],"properties":{"payer":{"type":"string"}},"title":"Billing"}]},"completed_at":{"type":["integer","null"],"format":"int64","description":"Unix timestamp (in seconds) of when this Response was completed.\nOnly present when the status is `completed`.","minimum":0},"conversation":{"oneOf":[{"type":"null"},{"description":"The conversation that this response belongs to. Input items and output\nitems from this response are automatically added to this conversation.","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The unique ID of the conversation that this response was associated with."}},"title":"Conversation"}]},"created_at":{"type":"integer","format":"int64","description":"Unix timestamp (in seconds) when this Response was created.","minimum":0},"error":{"oneOf":[{"type":"null"},{"description":"An error object returned when the model fails to generate a Response.","type":"object","required":["code","message"],"properties":{"code":{"type":"string","description":"A machine-readable error code that was returned."},"message":{"type":"string","description":"A human-readable description of the error that was returned."}},"title":"ErrorObject"}]},"id":{"type":"string","description":"Unique identifier for this response."},"incomplete_details":{"oneOf":[{"type":"null"},{"description":"Details about why the response is incomplete, if any.","type":"object","required":["reason"],"properties":{"reason":{"type":"string","description":"The reason why the response is incomplete."}},"title":"IncompleteDetails"}]},"instructions":{"oneOf":[{"type":"null"},{"description":"A system (or developer) message inserted into the model's context.\n\nWhen using along with `previous_response_id`, the instructions from a previous response\nwill not be carried over to the next response. This makes it simple to swap out\nsystem (or developer) messages in new responses.","oneOf":[{"type":"string","description":"A text input to the model, equivalent to a text input with the `developer` role."},{"type":"array","items":{"oneOf":[{"description":"A reference to an existing item by ID.\nHas a required `id` field and optional `type` (can be \"item_reference\" or null).\nMust be tried first as it's the most minimal structure.","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The ID of the item to reference."},"type":{"oneOf":[{"type":"null"},{"description":"The type of item to reference. Can be \"item_reference\" or null.","type":"string","enum":["item_reference"],"title":"ItemReferenceType"}]}},"title":"ItemReference"},{"description":"All structured items with proper type discrimination.\nIncludes InputMessage, OutputMessage, and all tool calls/outputs.\nUses the discriminated `Item` enum for efficient, type-safe deserialization.","oneOf":[{"allOf":[{"description":"A message (type: \"message\").\nCan represent InputMessage (user/system/developer) or OutputMessage (assistant).\n\nInputMessage:\n A message input to the model with a role indicating instruction following hierarchy.\n Instructions given with the developer or system role take precedence over instructions given with the user role.\nOutputMessage:\n A message output from the model.","oneOf":[{"description":"An output message from the model (role: assistant, has required id & status).\nThis must come first as it has the most specific structure (required id and status fields).","type":"object","required":["content","id","role","status"],"properties":{"content":{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A text output from the model.","type":"object","required":["annotations","text"],"properties":{"annotations":{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A citation to a file.","type":"object","required":["file_id","filename","index"],"properties":{"file_id":{"type":"string","description":"The ID of the file."},"filename":{"type":"string","description":"The filename of the file cited."},"index":{"type":"integer","format":"int32","description":"The index of the file in the list of files.","minimum":0}},"title":"FileCitationBody"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_citation"]}}}],"description":"A citation to a file."},{"allOf":[{"description":"A citation for a web resource used to generate a model response.","type":"object","required":["end_index","start_index","title","url"],"properties":{"end_index":{"type":"integer","format":"int32","description":"The index of the last character of the URL citation in the message.","minimum":0},"start_index":{"type":"integer","format":"int32","description":"The index of the first character of the URL citation in the message.","minimum":0},"title":{"type":"string","description":"The title of the web resource."},"url":{"type":"string","description":"The URL of the web resource."}},"title":"UrlCitationBody"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["url_citation"]}}}],"description":"A citation for a web resource used to generate a model response."},{"allOf":[{"description":"A citation for a container file used to generate a model response.","type":"object","required":["container_id","end_index","file_id","filename","start_index"],"properties":{"container_id":{"type":"string","description":"The ID of the container file."},"end_index":{"type":"integer","format":"int32","description":"The index of the last character of the container file citation in the message.","minimum":0},"file_id":{"type":"string","description":"The ID of the file."},"filename":{"type":"string","description":"The filename of the container file cited."},"start_index":{"type":"integer","format":"int32","description":"The index of the first character of the container file citation in the message.","minimum":0}},"title":"ContainerFileCitationBody"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["container_file_citation"]}}}],"description":"A citation for a container file used to generate a model response."},{"allOf":[{"description":"A path to a file.","type":"object","required":["file_id","index"],"properties":{"file_id":{"type":"string","description":"The ID of the file."},"index":{"type":"integer","format":"int32","description":"The index of the file in the list of files.","minimum":0}},"title":"FilePath"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_path"]}}}],"description":"A path to a file."}],"description":"An annotation that applies to a span of output text.","title":"Annotation"},"description":"The annotations of the text output."},"logprobs":{"type":["array","null"],"items":{"type":"object","required":["bytes","logprob","token","top_logprobs"],"properties":{"bytes":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"logprob":{"type":"number","format":"double"},"token":{"type":"string"},"top_logprobs":{"type":"array","items":{"type":"object","required":["bytes","logprob","token"],"properties":{"bytes":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"logprob":{"type":"number","format":"double"},"token":{"type":"string"}},"title":"TopLogProb"}}},"title":"LogProb"}},"text":{"type":"string","description":"The text output from the model."}},"title":"OutputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["output_text"]}}}],"description":"A text output from the model."},{"allOf":[{"description":"A refusal from the model.","type":"object","required":["refusal"],"properties":{"refusal":{"type":"string","description":"The refusal explanation from the model."}},"title":"RefusalContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["refusal"]}}}],"description":"A refusal from the model."}],"title":"OutputMessageContent"},"description":"The content of the output message."},"id":{"type":"string","description":"The unique ID of the output message."},"phase":{"oneOf":[{"type":"null"},{"description":"Labels this assistant message as intermediate commentary (`commentary`) or\nthe final answer (`final_answer`).","type":"string","enum":["commentary","final_answer"],"title":"MessagePhase"}]},"role":{"description":"The role of the output message. Always `assistant`.","type":"string","enum":["assistant"],"title":"AssistantRole"},"status":{"description":"The status of the message input. One of `in_progress`, `completed`, or\n`incomplete`. Populated when input items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}},"title":"OutputMessage"},{"description":"A structured input message (role: user/system/developer, content is `Vec`).\nHas structured content list and optional id/status fields.\n\nA message input to the model with a role indicating instruction following hierarchy.\nInstructions given with the `developer` or `system` role take precedence over instructions\ngiven with the `user` role.","type":"object","required":["content","role"],"properties":{"content":{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A text input to the model.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text input to the model."}},"title":"InputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_text"]}}}],"description":"A text input to the model."},{"allOf":[{"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision).","type":"object","properties":{"detail":{"description":"The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`.\nDefaults to `auto` when omitted in JSON input.","type":"string","enum":["auto","low","high","original"],"title":"ImageDetail"},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"image_url":{"type":["string","null"],"description":"The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image\nin a data URL."}},"title":"InputImageContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_image"]}}}],"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision)."},{"allOf":[{"description":"A file input to the model.","type":"object","properties":{"detail":{"oneOf":[{"type":"null"},{"description":"The detail level of the file to be sent to the model. Use `low` for the default rendering\nbehavior, or `high` to render the file at higher quality. Defaults to `low`.","type":"string","enum":["low","high"],"title":"FileInputDetail"}]},"file_data":{"type":["string","null"],"description":"The content of the file to be sent to the model."},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"file_url":{"type":["string","null"],"description":"The URL of the file to be sent to the model."},"filename":{"type":["string","null"],"description":"The name of the file to be sent to the model."}},"title":"InputFileContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_file"]}}}],"description":"A file input to the model."}],"description":"Parts of a message: text, image, file, or audio.","title":"InputContent"},"description":"A list of one or many input items to the model, containing different content types."},"role":{"description":"The role of the message input. One of `user`, `system`, or `developer`.\nNote: `assistant` is NOT allowed here; use OutputMessage instead.","type":"string","enum":["user","system","developer"],"title":"InputRole"},"status":{"oneOf":[{"type":"null"},{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]}},"title":"InputMessage"}],"title":"MessageItem"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["message"]}}}],"description":"A message (type: \"message\").\nCan represent InputMessage (user/system/developer) or OutputMessage (assistant).\n\nInputMessage:\n A message input to the model with a role indicating instruction following hierarchy.\n Instructions given with the developer or system role take precedence over instructions given with the user role.\nOutputMessage:\n A message output from the model."},{"allOf":[{"description":"The results of a file search tool call. See the\n[file search guide](https://platform.openai.com/docs/guides/tools-file-search) for more information.","type":"object","required":["id","queries","status"],"properties":{"id":{"type":"string","description":"The unique ID of the file search tool call."},"queries":{"type":"array","items":{"type":"string"},"description":"The queries used to search for files."},"results":{"type":["array","null"],"items":{"type":"object","description":"A single result from a file search.","required":["attributes","file_id","filename","score","text"],"properties":{"attributes":{"type":"object","description":"Set of 16 key-value pairs that can be attached to an object. This can be useful for storing\nadditional information about the object in a structured format, and querying for objects\nAPI or the dashboard. Keys are strings with a maximum length of 64 characters\n. Values are strings with a maximum length of 512 characters, booleans, or numbers.","additionalProperties":{},"propertyNames":{"type":"string"}},"file_id":{"type":"string","description":"The unique ID of the file."},"filename":{"type":"string","description":"The name of the file."},"score":{"type":"number","format":"float","description":"The relevance score of the file - a value between 0 and 1."},"text":{"type":"string","description":"The text that was retrieved from the file."}},"title":"FileSearchToolCallResult"},"description":"The results of the file search tool call."},"status":{"description":"The status of the file search tool call. One of `in_progress`, `searching`,\n`incomplete`,`failed`, or `completed`.","type":"string","enum":["in_progress","searching","incomplete","failed","completed"],"title":"FileSearchToolCallStatus"}},"title":"FileSearchToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_search_call"]}}}],"description":"The results of a file search tool call. See the\n[file search guide](https://platform.openai.com/docs/guides/tools-file-search) for more information."},{"allOf":[{"description":"A tool call to a computer use tool. See the\n[computer use guide](https://platform.openai.com/docs/guides/tools-computer-use) for more information.","type":"object","required":["call_id","id","pending_safety_checks","status"],"properties":{"action":{"oneOf":[{"type":"null"},{"oneOf":[{"allOf":[{"description":"A click action.","type":"object","required":["button","x","y"],"properties":{"button":{"description":"Indicates which mouse button was pressed during the click. One of `left`,\n`right`, `wheel`, `back`, or `forward`.","type":"string","enum":["left","right","wheel","back","forward"],"title":"ClickButtonType"},"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while clicking."},"x":{"type":"integer","format":"int32","description":"The x-coordinate where the click occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the click occurred."}},"title":"ClickParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["click"]}}}],"description":"A click action."},{"allOf":[{"description":"A double click action.","type":"object","required":["x","y"],"properties":{"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while double clicking."},"x":{"type":"integer","format":"int32","description":"The x-coordinate where the double click occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the double click occurred."}},"title":"DoubleClickAction"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["double_click"]}}}],"description":"A double click action."},{"allOf":[{"description":"A drag action.","type":"object","required":["path"],"properties":{"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while dragging the mouse."},"path":{"type":"array","items":{"type":"object","description":"An x/y coordinate pair.","required":["x","y"],"properties":{"x":{"type":"integer","format":"int32","description":"The x-coordinate."},"y":{"type":"integer","format":"int32","description":"The y-coordinate."}},"title":"CoordParam"},"description":"An array of coordinates representing the path of the drag action."}},"title":"DragParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["drag"]}}}],"description":"A drag action."},{"allOf":[{"description":"A collection of keypresses the model would like to perform.","type":"object","required":["keys"],"properties":{"keys":{"type":"array","items":{"type":"string"},"description":"The combination of keys the model is requesting to be pressed.\nThis is an array of strings, each representing a key."}},"title":"KeyPressAction"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["keypress"]}}}],"description":"A collection of keypresses the model would like to perform."},{"allOf":[{"description":"A mouse move action.","type":"object","required":["x","y"],"properties":{"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while moving the mouse."},"x":{"type":"integer","format":"int32","description":"The x-coordinate to move to."},"y":{"type":"integer","format":"int32","description":"The y-coordinate to move to."}},"title":"MoveParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["move"]}}}],"description":"A mouse move action."},{"type":"object","description":"A screenshot action.","required":["type"],"properties":{"type":{"type":"string","enum":["screenshot"]}}},{"allOf":[{"description":"A scroll action.","type":"object","required":["scroll_x","scroll_y","x","y"],"properties":{"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while scrolling."},"scroll_x":{"type":"integer","format":"int32","description":"The horizontal scroll distance."},"scroll_y":{"type":"integer","format":"int32","description":"The vertical scroll distance."},"x":{"type":"integer","format":"int32","description":"The x-coordinate where the scroll occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the scroll occurred."}},"title":"ScrollParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["scroll"]}}}],"description":"A scroll action."},{"allOf":[{"description":"An action to type in text.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text to type."}},"title":"TypeParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["type"]}}}],"description":"An action to type in text."},{"type":"object","description":"A wait action.","required":["type"],"properties":{"type":{"type":"string","enum":["wait"]}}}],"description":"Represents all user‐triggered actions.","title":"ComputerAction"}]},"actions":{"type":["array","null"],"items":{"oneOf":[{"allOf":[{"description":"A click action.","type":"object","required":["button","x","y"],"properties":{"button":{"description":"Indicates which mouse button was pressed during the click. One of `left`,\n`right`, `wheel`, `back`, or `forward`.","type":"string","enum":["left","right","wheel","back","forward"],"title":"ClickButtonType"},"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while clicking."},"x":{"type":"integer","format":"int32","description":"The x-coordinate where the click occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the click occurred."}},"title":"ClickParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["click"]}}}],"description":"A click action."},{"allOf":[{"description":"A double click action.","type":"object","required":["x","y"],"properties":{"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while double clicking."},"x":{"type":"integer","format":"int32","description":"The x-coordinate where the double click occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the double click occurred."}},"title":"DoubleClickAction"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["double_click"]}}}],"description":"A double click action."},{"allOf":[{"description":"A drag action.","type":"object","required":["path"],"properties":{"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while dragging the mouse."},"path":{"type":"array","items":{"type":"object","description":"An x/y coordinate pair.","required":["x","y"],"properties":{"x":{"type":"integer","format":"int32","description":"The x-coordinate."},"y":{"type":"integer","format":"int32","description":"The y-coordinate."}},"title":"CoordParam"},"description":"An array of coordinates representing the path of the drag action."}},"title":"DragParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["drag"]}}}],"description":"A drag action."},{"allOf":[{"description":"A collection of keypresses the model would like to perform.","type":"object","required":["keys"],"properties":{"keys":{"type":"array","items":{"type":"string"},"description":"The combination of keys the model is requesting to be pressed.\nThis is an array of strings, each representing a key."}},"title":"KeyPressAction"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["keypress"]}}}],"description":"A collection of keypresses the model would like to perform."},{"allOf":[{"description":"A mouse move action.","type":"object","required":["x","y"],"properties":{"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while moving the mouse."},"x":{"type":"integer","format":"int32","description":"The x-coordinate to move to."},"y":{"type":"integer","format":"int32","description":"The y-coordinate to move to."}},"title":"MoveParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["move"]}}}],"description":"A mouse move action."},{"type":"object","description":"A screenshot action.","required":["type"],"properties":{"type":{"type":"string","enum":["screenshot"]}}},{"allOf":[{"description":"A scroll action.","type":"object","required":["scroll_x","scroll_y","x","y"],"properties":{"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while scrolling."},"scroll_x":{"type":"integer","format":"int32","description":"The horizontal scroll distance."},"scroll_y":{"type":"integer","format":"int32","description":"The vertical scroll distance."},"x":{"type":"integer","format":"int32","description":"The x-coordinate where the scroll occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the scroll occurred."}},"title":"ScrollParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["scroll"]}}}],"description":"A scroll action."},{"allOf":[{"description":"An action to type in text.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text to type."}},"title":"TypeParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["type"]}}}],"description":"An action to type in text."},{"type":"object","description":"A wait action.","required":["type"],"properties":{"type":{"type":"string","enum":["wait"]}}}],"description":"Represents all user‐triggered actions.","title":"ComputerAction"},"description":"Flattened batched actions for `computer_use`. Each action includes a\n`type` discriminator and action-specific fields."},"call_id":{"type":"string","description":"An identifier used when responding to the tool call with output."},"id":{"type":"string","description":"The unique ID of the computer call."},"pending_safety_checks":{"type":"array","items":{"type":"object","required":["id"],"properties":{"code":{"type":["string","null"],"description":"The type of the pending safety check."},"id":{"type":"string","description":"The ID of the pending safety check."},"message":{"type":["string","null"],"description":"Details about the pending safety check."}},"title":"ComputerCallSafetyCheckParam"},"description":"The pending safety checks for the computer call."},"status":{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}},"title":"ComputerToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer_call"]}}}],"description":"A tool call to a computer use tool. See the\n[computer use guide](https://platform.openai.com/docs/guides/tools-computer-use) for more information."},{"allOf":[{"description":"The output of a computer tool call.","type":"object","required":["call_id","output"],"properties":{"acknowledged_safety_checks":{"type":["array","null"],"items":{"type":"object","required":["id"],"properties":{"code":{"type":["string","null"],"description":"The type of the pending safety check."},"id":{"type":"string","description":"The ID of the pending safety check."},"message":{"type":["string","null"],"description":"Details about the pending safety check."}},"title":"ComputerCallSafetyCheckParam"},"description":"The safety checks reported by the API that have been acknowledged by the developer."},"call_id":{"type":"string","description":"The ID of the computer tool call that produced the output."},"id":{"type":["string","null"],"description":"The unique ID of the computer tool call output. Optional when creating."},"output":{"description":"A computer screenshot image used with the computer use tool.","type":"object","required":["type"],"properties":{"file_id":{"type":["string","null"],"description":"The identifier of an uploaded file that contains the screenshot."},"image_url":{"type":["string","null"],"description":"The URL of the screenshot image."},"type":{"description":"Specifies the event type. For a computer screenshot, this property is always\nset to `computer_screenshot`.","type":"string","enum":["computer_screenshot"],"title":"ComputerScreenshotImageType"}},"title":"ComputerScreenshotImage"},"status":{"oneOf":[{"type":"null"},{"description":"The status of the message input. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when input items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]}},"title":"ComputerCallOutputItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer_call_output"]}}}],"description":"The output of a computer tool call."},{"allOf":[{"description":"The results of a web search tool call. See the\n[web search guide](https://platform.openai.com/docs/guides/tools-web-search) for more information.","type":"object","required":["id","status"],"properties":{"action":{"oneOf":[{"type":"null"},{"description":"An object describing the specific action taken in this web search call. Includes\ndetails on how the model used the web (search, open_page, find, find_in_page).\n\nThis is optional because `response.output_item.added` events can include\nin-progress web search calls before OpenAI has populated the action.\nSee .","oneOf":[{"allOf":[{"description":"Action type \"search\" - Performs a web search query.","type":"object","required":["query"],"properties":{"query":{"type":"string","description":"The search query."},"sources":{"type":["array","null"],"items":{"type":"object","required":["type","url"],"properties":{"type":{"type":"string","description":"The type of source. Always `url`."},"url":{"type":"string","description":"The URL of the source."}},"title":"WebSearchActionSearchSource"},"description":"The sources used in the search."}},"title":"WebSearchActionSearch"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["search"]}}}],"description":"Action type \"search\" - Performs a web search query."},{"allOf":[{"description":"Action type \"open_page\" - Opens a specific URL from search results.","type":"object","properties":{"url":{"type":["string","null"],"description":"The URL opened by the model."}},"title":"WebSearchActionOpenPage"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["open_page"]}}}],"description":"Action type \"open_page\" - Opens a specific URL from search results."},{"allOf":[{"description":"Action type \"find\": Searches for a pattern within a loaded page.","type":"object","required":["url","pattern"],"properties":{"pattern":{"type":"string","description":"The pattern or text to search for within the page."},"url":{"type":"string","description":"The URL of the page searched for the pattern."}},"title":"WebSearchActionFind"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["find"]}}}],"description":"Action type \"find\": Searches for a pattern within a loaded page."},{"allOf":[{"description":"Action type \"find_in_page\": ","type":"object","required":["url","pattern"],"properties":{"pattern":{"type":"string","description":"The pattern or text to search for within the page."},"url":{"type":"string","description":"The URL of the page searched for the pattern."}},"title":"WebSearchActionFind"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["find_in_page"]}}}],"description":"Action type \"find_in_page\": "}],"title":"WebSearchToolCallAction"}]},"id":{"type":"string","description":"The unique ID of the web search tool call."},"status":{"description":"The status of the web search tool call.","type":"string","enum":["in_progress","searching","completed","failed"],"title":"WebSearchToolCallStatus"}},"title":"WebSearchToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_call"]}}}],"description":"The results of a web search tool call. See the\n[web search guide](https://platform.openai.com/docs/guides/tools-web-search) for more information."},{"allOf":[{"description":"A tool call to run a function. See the\n\n[function calling guide](https://platform.openai.com/docs/guides/function-calling) for more information.","type":"object","required":["arguments","call_id","name"],"properties":{"arguments":{"type":"string","description":"A JSON string of the arguments to pass to the function."},"call_id":{"type":"string","description":"The unique ID of the function tool call generated by the model."},"id":{"type":["string","null"],"description":"The unique ID of the function tool call."},"name":{"type":"string","description":"The name of the function to run."},"namespace":{"type":["string","null"],"description":"The namespace of the function to run."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]}},"title":"FunctionToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function_call"]}}}],"description":"A tool call to run a function. See the\n\n[function calling guide](https://platform.openai.com/docs/guides/function-calling) for more information."},{"allOf":[{"description":"The output of a function tool call.","type":"object","required":["call_id","output"],"properties":{"call_id":{"type":"string","description":"The unique ID of the function tool call generated by the model."},"id":{"type":["string","null"],"description":"The unique ID of the function tool call output.\nPopulated when this item is returned via API."},"output":{"description":"Text, image, or file output of the function tool call.","oneOf":[{"type":"string","description":"A JSON string of the output of the function tool call."},{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A text input to the model.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text input to the model."}},"title":"InputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_text"]}}}],"description":"A text input to the model."},{"allOf":[{"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision).","type":"object","properties":{"detail":{"description":"The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`.\nDefaults to `auto` when omitted in JSON input.","type":"string","enum":["auto","low","high","original"],"title":"ImageDetail"},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"image_url":{"type":["string","null"],"description":"The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image\nin a data URL."}},"title":"InputImageContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_image"]}}}],"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision)."},{"allOf":[{"description":"A file input to the model.","type":"object","properties":{"detail":{"oneOf":[{"type":"null"},{"description":"The detail level of the file to be sent to the model. Use `low` for the default rendering\nbehavior, or `high` to render the file at higher quality. Defaults to `low`.","type":"string","enum":["low","high"],"title":"FileInputDetail"}]},"file_data":{"type":["string","null"],"description":"The content of the file to be sent to the model."},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"file_url":{"type":["string","null"],"description":"The URL of the file to be sent to the model."},"filename":{"type":["string","null"],"description":"The name of the file to be sent to the model."}},"title":"InputFileContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_file"]}}}],"description":"A file input to the model."}],"description":"Parts of a message: text, image, file, or audio.","title":"InputContent"}}],"title":"FunctionCallOutput"},"status":{"oneOf":[{"type":"null"},{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]}},"title":"FunctionCallOutputItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function_call_output"]}}}],"description":"The output of a function tool call."},{"allOf":[{"description":"A tool search call.","type":"object","properties":{"arguments":{"description":"The arguments supplied to the tool search call."},"call_id":{"type":["string","null"],"description":"The unique ID of the tool search call generated by the model."},"execution":{"oneOf":[{"type":"null"},{"description":"Whether tool search was executed by the server or by the client.","type":"string","enum":["server","client"],"title":"ToolSearchExecutionType"}]},"id":{"type":["string","null"],"description":"The unique ID of this tool search call."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the tool search call.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]}},"title":"ToolSearchCallItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["tool_search_call"]}}}],"description":"A tool search call."},{"allOf":[{"description":"A tool search output.","type":"object","required":["tools"],"properties":{"call_id":{"type":["string","null"],"description":"The unique ID of the tool search call generated by the model."},"execution":{"oneOf":[{"type":"null"},{"description":"Whether tool search was executed by the server or by the client.","type":"string","enum":["server","client"],"title":"ToolSearchExecutionType"}]},"id":{"type":["string","null"],"description":"The unique ID of this tool search output."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the tool search output.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]},"tools":{"type":"array","items":{"oneOf":[{"allOf":[{"description":"Defines a function in your own code the model can choose to call. Learn more about [function\ncalling](https://platform.openai.com/docs/guides/tools).","type":"object","required":["name"],"properties":{"defer_loading":{"type":["boolean","null"],"description":"Whether this function is deferred and loaded via tool search."},"description":{"type":["string","null"],"description":"A description of the function. Used by the model to determine whether or not to call the\nfunction."},"name":{"type":"string","description":"The name of the function to call."},"parameters":{"description":"A JSON schema object describing the parameters of the function."},"strict":{"type":["boolean","null"],"description":"Whether to enforce strict parameter validation. Default `true`."}},"title":"FunctionTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function"]}}}],"description":"Defines a function in your own code the model can choose to call. Learn more about [function\ncalling](https://platform.openai.com/docs/guides/tools)."},{"allOf":[{"description":"A tool that searches for relevant content from uploaded files. Learn more about the [file search\ntool](https://platform.openai.com/docs/guides/tools-file-search).","type":"object","required":["vector_store_ids"],"properties":{"filters":{"oneOf":[{"type":"null"},{"description":"A filter to apply.","oneOf":[{"description":"A filter used to compare a specified attribute key to a given value using a defined\ncomparison operation.","type":"object","required":["type","key","value"],"properties":{"key":{"type":"string","description":"The key to compare against the value."},"type":{"description":"Specifies the comparison operator: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`.\n- `eq`: equals\n- `ne`: not equal\n- `gt`: greater than\n- `gte`: greater than or equal\n- `lt`: less than\n- `lte`: less than or equal\n- `in`: in\n- `nin`: not in","type":"string","enum":["eq","ne","gt","gte","lt","lte","in","nin"],"title":"ComparisonType"},"value":{"description":"The value to compare against the attribute key; supports string, number, or boolean types."}},"title":"ComparisonFilter"},{"description":"Combine multiple filters using `and` or `or`.","type":"object","required":["type","filters"],"properties":{"filters":{"type":"array","items":{"oneOf":"circular()","description":"Filters for file search.","title":"Filter"},"description":"Array of filters to combine. Items can be ComparisonFilter or CompoundFilter."},"type":{"type":"string","enum":["and","or"],"description":"'Type of operation: `and` or `or`.'"}},"title":"CompoundFilter"}],"title":"Filter"}]},"max_num_results":{"type":["integer","null"],"format":"int32","description":"The maximum number of results to return. This number should be between 1 and 50 inclusive.","minimum":0},"ranking_options":{"oneOf":[{"type":"null"},{"description":"Ranking options for search.","type":"object","required":["ranker"],"properties":{"hybrid_search":{"oneOf":[{"type":"null"},{"description":"Weights that control how reciprocal rank fusion balances semantic embedding matches versus\nsparse keyword matches when hybrid search is enabled.","type":"object","required":["embedding_weight","text_weight"],"properties":{"embedding_weight":{"type":"number","format":"float","description":"The weight of the embedding in the reciprocal ranking fusion."},"text_weight":{"type":"number","format":"float","description":"The weight of the text in the reciprocal ranking fusion."}},"title":"HybridSearch"}]},"ranker":{"description":"The ranker to use for the file search.","type":"string","enum":["auto","default-2024-11-15"],"title":"RankVersionType"},"score_threshold":{"type":["number","null"],"format":"float","description":"The score threshold for the file search, a number between 0 and 1. Numbers closer to 1 will\nattempt to return only the most relevant results, but may return fewer results."}},"title":"RankingOptions"}]},"vector_store_ids":{"type":"array","items":{"type":"string"},"description":"The IDs of the vector stores to search."}},"title":"FileSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_search"]}}}],"description":"A tool that searches for relevant content from uploaded files. Learn more about the [file search\ntool](https://platform.openai.com/docs/guides/tools-file-search)."},{"allOf":[{"description":"A tool that controls a virtual computer. Learn more about the [computer\nuse tool](https://platform.openai.com/docs/guides/tools-computer-use).","type":"object","required":["environment","display_width","display_height"],"properties":{"display_height":{"type":"integer","format":"int32","description":"The height of the computer display.","minimum":0},"display_width":{"type":"integer","format":"int32","description":"The width of the computer display.","minimum":0},"environment":{"description":"The type of computer environment to control.","type":"string","enum":["windows","mac","linux","ubuntu","browser"],"title":"ComputerEnvironment"}},"title":"ComputerUsePreviewTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer_use_preview"]}}}],"description":"A tool that controls a virtual computer. Learn more about the [computer\nuse tool](https://platform.openai.com/docs/guides/tools-computer-use)."},{"allOf":[{"description":"Search the Internet for sources related to the prompt. Learn more about the\n[web search tool](https://platform.openai.com/docs/guides/tools-web-search).","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_content_types":{"type":["array","null"],"items":{"type":"string","description":"The type of content to search for.","enum":["text","image"],"title":"SearchContentType"},"description":"The types of content to search for."},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Defaults to `approximate` when omitted in JSON input.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search"]}}}],"description":"Search the Internet for sources related to the prompt. Learn more about the\n[web search tool](https://platform.openai.com/docs/guides/tools-web-search)."},{"allOf":[{"description":"type: web_search_2025_08_26","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_content_types":{"type":["array","null"],"items":{"type":"string","description":"The type of content to search for.","enum":["text","image"],"title":"SearchContentType"},"description":"The types of content to search for."},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Defaults to `approximate` when omitted in JSON input.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_2025_08_26"]}}}],"description":"type: web_search_2025_08_26"},{"allOf":[{"description":"Give the model access to additional tools via remote Model Context Protocol\n(MCP) servers. [Learn more about MCP](https://platform.openai.com/docs/guides/tools-remote-mcp).","type":"object","required":["server_label"],"properties":{"allowed_tools":{"oneOf":[{"type":"null"},{"description":"List of allowed tool names or a filter object.","oneOf":[{"type":"array","items":{"type":"string"},"description":"A string array of allowed tool names"},{"description":"A filter object to specify which tools are allowed.","type":"object","properties":{"read_only":{"type":["boolean","null"],"description":"Indicates whether or not a tool modifies data or is read-only.\nIf an MCP server is annotated with [readOnlyHint](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\nit will match this filter."},"tool_names":{"type":["array","null"],"items":{"type":"string"},"description":"List of allowed tool names."}},"title":"MCPToolFilter"}],"title":"MCPToolAllowedTools"}]},"authorization":{"type":["string","null"],"description":"An OAuth access token that can be used with a remote MCP server, either with a custom MCP\nserver URL or a service connector. Your application must handle the OAuth authorization\nflow and provide the token here."},"connector_id":{"oneOf":[{"type":"null"},{"description":"Identifier for service connectors, like those available in ChatGPT. One of `server_url` or\n`connector_id` must be provided. Learn more about service connectors [here](https://platform.openai.com/docs/guides/tools-remote-mcp#connectors).\n\nCurrently supported `connector_id` values are:\n- Dropbox: `connector_dropbox`\n- Gmail: `connector_gmail`\n- Google Calendar: `connector_googlecalendar`\n- Google Drive: `connector_googledrive`\n- Microsoft Teams: `connector_microsoftteams`\n- Outlook Calendar: `connector_outlookcalendar`\n- Outlook Email: `connector_outlookemail`\n- SharePoint: `connector_sharepoint`","type":"string","enum":["connector_dropbox","connector_gmail","connector_googlecalendar","connector_googledrive","connector_microsoftteams","connector_outlookcalendar","connector_outlookemail","connector_sharepoint"],"title":"McpToolConnectorId"}]},"defer_loading":{"type":["boolean","null"],"description":"Whether this MCP tool is deferred and discovered via tool search."},"headers":{"description":"Optional HTTP headers to send to the MCP server. Use for authentication or other purposes."},"require_approval":{"oneOf":[{"type":"null"},{"description":"Specify which of the MCP server's tools require approval.","oneOf":[{"description":"Specify which of the MCP server's tools require approval. Can be\n`always`, `never`, or a filter object associated with tools\nthat require approval.","type":"object","properties":{"always":{"oneOf":[{"type":"null"},{"description":"A list of tools that always require approval.","type":"object","properties":{"read_only":{"type":["boolean","null"],"description":"Indicates whether or not a tool modifies data or is read-only.\nIf an MCP server is annotated with [readOnlyHint](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\nit will match this filter."},"tool_names":{"type":["array","null"],"items":{"type":"string"},"description":"List of allowed tool names."}},"title":"MCPToolFilter"}]},"never":{"oneOf":[{"type":"null"},{"description":"A list of tools that never require approval.","type":"object","properties":{"read_only":{"type":["boolean","null"],"description":"Indicates whether or not a tool modifies data or is read-only.\nIf an MCP server is annotated with [readOnlyHint](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\nit will match this filter."},"tool_names":{"type":["array","null"],"items":{"type":"string"},"description":"List of allowed tool names."}},"title":"MCPToolFilter"}]}},"title":"MCPToolApprovalFilter"},{"description":"Specify a single approval policy for all tools. One of `always` or\n`never`. When set to `always`, all tools will require approval. When\nset to `never`, all tools will not require approval.","type":"string","enum":["always","never"],"title":"MCPToolApprovalSetting"}],"title":"MCPToolRequireApproval"}]},"server_description":{"type":["string","null"],"description":"Optional description of the MCP server, used to provide more context."},"server_label":{"type":"string","description":"A label for this MCP server, used to identify it in tool calls."},"server_url":{"type":["string","null"],"description":"The URL for the MCP server. One of `server_url` or `connector_id` must be provided."}},"title":"MCPTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp"]}}}],"description":"Give the model access to additional tools via remote Model Context Protocol\n(MCP) servers. [Learn more about MCP](https://platform.openai.com/docs/guides/tools-remote-mcp)."},{"allOf":[{"description":"A tool that runs Python code to help generate a response to a prompt.","type":"object","required":["container"],"properties":{"container":{"description":"The code interpreter container. Can be a container ID or an object that\nspecifies uploaded file IDs to make available to your code, along with an\noptional `memory_limit` setting.","oneOf":[{"allOf":[{"description":"Configuration for a code interpreter container. Optionally specify the IDs of the\nfiles to run the code on.","type":"object","properties":{"file_ids":{"type":["array","null"],"items":{"type":"string"},"description":"An optional list of uploaded files to make available to your code."},"memory_limit":{"type":["integer","null"],"format":"int64","minimum":0}},"title":"CodeInterpreterContainerAuto"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["auto"]}}}],"description":"Configuration for a code interpreter container. Optionally specify the IDs of the\nfiles to run the code on."},{"type":"object","description":"The container ID.","required":["type"],"properties":{"type":{"type":"string","enum":["container_i_d"]}}}],"title":"CodeInterpreterToolContainer"}},"title":"CodeInterpreterTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["code_interpreter"]}}}],"description":"A tool that runs Python code to help generate a response to a prompt."},{"allOf":[{"description":"A tool that generates images using a model like `gpt-image-1`.","type":"object","properties":{"action":{"oneOf":[{"type":"null"},{"description":"Whether to generate a new image or edit an existing image. Default: `auto`.","type":"string","enum":["generate","edit","auto"],"title":"ImageGenActionEnum"}]},"background":{"oneOf":[{"type":"null"},{"description":"Background type for the generated image. One of `transparent`,\n`opaque`, or `auto`. Default: `auto`.","type":"string","enum":["transparent","opaque","auto"],"title":"ImageGenToolBackground"}]},"input_fidelity":{"oneOf":[{"type":"null"},{"description":"Control how much effort the model will exert to match the style and features, especially facial features,\nof input images. This parameter is only supported for `gpt-image-1`. Unsupported\nfor `gpt-image-1-mini`. Supports `high` and `low`. Defaults to `low`.","type":"string","enum":["high","low"],"title":"InputFidelity"}]},"input_image_mask":{"oneOf":[{"type":"null"},{"description":"Optional mask for inpainting. Contains `image_url`\n(string, optional) and `file_id` (string, optional).","type":"object","properties":{"file_id":{"type":["string","null"],"description":"File ID for the mask image."},"image_url":{"type":["string","null"],"description":"Base64-encoded mask image."}},"title":"ImageGenToolInputImageMask"}]},"model":{"type":["string","null"],"description":"The image generation model to use. Default: `gpt-image-1`."},"moderation":{"oneOf":[{"type":"null"},{"description":"Moderation level for the generated image. Default: `auto`.","type":"string","enum":["auto","low"],"title":"ImageGenToolModeration"}]},"output_compression":{"type":["integer","null"],"format":"int32","description":"Compression level for the output image. Default: 100.","minimum":0},"output_format":{"oneOf":[{"type":"null"},{"description":"The output format of the generated image. One of `png`, `webp`, or\n`jpeg`. Default: `png`.","type":"string","enum":["png","webp","jpeg"],"title":"ImageGenToolOutputFormat"}]},"partial_images":{"type":["integer","null"],"format":"int32","description":"Number of partial images to generate in streaming mode, from 0 (default value) to 3.","minimum":0},"quality":{"oneOf":[{"type":"null"},{"description":"The quality of the generated image. One of `low`, `medium`, `high`,\nor `auto`. Default: `auto`.","type":"string","enum":["low","medium","high","auto"],"title":"ImageGenToolQuality"}]},"size":{"oneOf":[{"type":"null"},{"description":"The size of the generated images. For `gpt-image-2` and\n`gpt-image-2-2026-04-21`, arbitrary resolutions are supported as\n`WIDTHxHEIGHT` strings, for example `1536x864`. Width and height\nmust both be divisible by 16 and the requested aspect ratio must be\nbetween 1:3 and 3:1. Resolutions above `2560x1440` are experimental,\nand the maximum supported resolution is `3840x2160`. The requested\nsize must also satisfy the model's current pixel and edge limits.\nThe standard sizes `1024x1024`, `1536x1024`, and `1024x1536` are\nsupported by the GPT image models; `auto` is supported for models\nthat allow automatic sizing. For `dall-e-2`, use one of `256x256`,\n`512x512`, or `1024x1024`. For `dall-e-3`, use one of `1024x1024`,\n`1792x1024`, or `1024x1792`.","oneOf":[{"type":"string","enum":["auto"]},{"type":"string","enum":["1024x1024"]},{"type":"string","enum":["1024x1536"]},{"type":"string","enum":["1536x1024"]},{"type":"object","required":["other"],"properties":{"other":{"type":"string"}}}],"title":"ImageGenToolSize"}]}},"title":"ImageGenTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["image_generation"]}}}],"description":"A tool that generates images using a model like `gpt-image-1`."},{"type":"object","description":"A tool that allows the model to execute shell commands in a local environment.","required":["type"],"properties":{"type":{"type":"string","enum":["local_shell"]}}},{"allOf":[{"description":"A tool that allows the model to execute shell commands.","type":"object","properties":{"environment":{"oneOf":[{"type":"null"},{"description":"The execution environment for the shell tool.","oneOf":[{"allOf":[{"description":"Automatically creates a container for this request.","type":"object","properties":{"file_ids":{"type":["array","null"],"items":{"type":"string"},"description":"An optional list of uploaded file IDs to make available in the container."},"network_policy":{"oneOf":[{"type":"null"},{"description":"Network access policy for the container.","oneOf":[{"type":"object","description":"Disable all outbound network access.","required":["type"],"properties":{"type":{"type":"string","enum":["disabled"]}}},{"allOf":[{"description":"Allow access only to specified domains.","type":"object","required":["allowed_domains"],"properties":{"allowed_domains":{"type":"array","items":{"type":"string"},"description":"A list of allowed domains."},"domain_secrets":{"type":["array","null"],"items":{"type":"object","description":"A domain-scoped secret injected for allowlisted domains.","required":["domain","name","value"],"properties":{"domain":{"type":"string","description":"The domain associated with the secret."},"name":{"type":"string","description":"The name of the secret to inject for the domain."},"value":{"type":"string","description":"The secret value to inject for the domain."}},"title":"ContainerNetworkPolicyDomainSecretParam"},"description":"Optional domain-scoped secrets for allowlisted domains."}},"title":"ContainerNetworkPolicyAllowlistDetails"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["allowlist"]}}}],"description":"Allow access only to specified domains."}],"title":"ContainerNetworkPolicy"}]},"skills":{"type":["array","null"],"items":{"oneOf":[{"allOf":[{"description":"Reference a skill by ID.","type":"object","required":["skill_id"],"properties":{"skill_id":{"type":"string","description":"The ID of the skill to reference."},"version":{"type":["string","null"],"description":"An optional specific version to use."}},"title":"SkillReferenceParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["skill_reference"]}}}],"description":"Reference a skill by ID."},{"allOf":[{"description":"Provide an inline skill definition.","type":"object","required":["name","description","source"],"properties":{"description":{"type":"string","description":"The description of the skill."},"name":{"type":"string","description":"The name of the skill."},"source":{"description":"The inline source for the skill.","type":"object","required":["media_type","data"],"properties":{"data":{"type":"string","description":"The base64-encoded skill data."},"media_type":{"type":"string","description":"The media type. Always `\"application/zip\"`."}},"title":"InlineSkillSourceParam"}},"title":"InlineSkillParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["inline"]}}}],"description":"Provide an inline skill definition."}],"description":"A skill parameter — either a reference or inline definition.","title":"SkillParam"},"description":"An optional list of skills to make available in the container."}},"title":"ContainerAutoParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["container_auto"]}}}],"description":"Automatically creates a container for this request."},{"allOf":[{"description":"Use a local computer environment.","type":"object","properties":{"skills":{"type":["array","null"],"items":{"type":"object","description":"A local skill available in a local environment.","required":["name","description","path"],"properties":{"description":{"type":"string","description":"The description of the skill."},"name":{"type":"string","description":"The name of the skill."},"path":{"type":"string","description":"The path to the directory containing the skill."}},"title":"LocalSkillParam"},"description":"An optional list of local skills."}},"title":"LocalEnvironmentParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["local"]}}}],"description":"Use a local computer environment."},{"allOf":[{"description":"Reference an existing container by ID.","type":"object","required":["container_id"],"properties":{"container_id":{"type":"string","description":"The ID of the referenced container."}},"title":"ContainerReferenceParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["container_reference"]}}}],"description":"Reference an existing container by ID."}],"title":"FunctionShellEnvironment"}]}},"title":"FunctionShellToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["shell"]}}}],"description":"A tool that allows the model to execute shell commands."},{"allOf":[{"description":"A custom tool that processes input using a specified format. Learn more about [custom\ntools](https://platform.openai.com/docs/guides/function-calling#custom-tools)","type":"object","required":["name","format"],"properties":{"defer_loading":{"type":["boolean","null"],"description":"Whether this tool should be deferred and discovered via tool search."},"description":{"type":["string","null"],"description":"Optional description of the custom tool, used to provide more context."},"format":{"description":"The input format for the custom tool. Default is unconstrained text.","oneOf":[{"type":"object","description":"Unconstrained free-form text.","required":["type"],"properties":{"type":{"type":"string","enum":["text"]}}},{"allOf":[{"description":"A grammar defined by the user.","type":"object","required":["definition","syntax"],"properties":{"definition":{"type":"string","description":"The grammar definition."},"syntax":{"description":"The syntax of the grammar definition. One of `lark` or `regex`.","type":"string","enum":["lark","regex"],"title":"GrammarSyntax"}},"title":"CustomGrammarFormatParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["grammar"]}}}],"description":"A grammar defined by the user."}],"title":"CustomToolParamFormat"},"name":{"type":"string","description":"The name of the custom tool, used to identify it in tool calls."}},"title":"CustomToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom"]}}}],"description":"A custom tool that processes input using a specified format. Learn more about [custom\ntools](https://platform.openai.com/docs/guides/function-calling#custom-tools)"},{"allOf":[{"description":"A tool that controls a virtual computer. Learn more about the\n[computer tool](https://platform.openai.com/docs/guides/tools-computer-use).","type":"object","title":"ComputerTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer"]}}}],"description":"A tool that controls a virtual computer. Learn more about the\n[computer tool](https://platform.openai.com/docs/guides/tools-computer-use)."},{"allOf":[{"description":"Groups function/custom tools under a shared namespace.","type":"object","required":["name","description","tools"],"properties":{"description":{"type":"string","description":"A description of the namespace shown to the model."},"name":{"type":"string","description":"The namespace name used in tool calls (for example, `crm`)."},"tools":{"type":"array","items":{"oneOf":[{"allOf":[{"type":"object","description":"A function tool that can be used within a namespace or with tool search.","required":["name"],"properties":{"defer_loading":{"type":["boolean","null"],"description":"Whether this function should be deferred and discovered via tool search."},"description":{"type":["string","null"],"description":"A description of the function."},"name":{"type":"string","description":"The name of the function."},"parameters":{"description":"A JSON schema object describing the parameters of the function."},"strict":{"type":["boolean","null"],"description":"Whether to enforce strict parameter validation."}},"title":"FunctionToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function"]}}}]},{"allOf":[{"type":"object","required":["name","format"],"properties":{"defer_loading":{"type":["boolean","null"],"description":"Whether this tool should be deferred and discovered via tool search."},"description":{"type":["string","null"],"description":"Optional description of the custom tool, used to provide more context."},"format":{"description":"The input format for the custom tool. Default is unconstrained text.","oneOf":[{"type":"object","description":"Unconstrained free-form text.","required":["type"],"properties":{"type":{"type":"string","enum":["text"]}}},{"allOf":[{"description":"A grammar defined by the user.","type":"object","required":["definition","syntax"],"properties":{"definition":{"type":"string","description":"The grammar definition."},"syntax":{"description":"The syntax of the grammar definition. One of `lark` or `regex`.","type":"string","enum":["lark","regex"],"title":"GrammarSyntax"}},"title":"CustomGrammarFormatParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["grammar"]}}}],"description":"A grammar defined by the user."}],"title":"CustomToolParamFormat"},"name":{"type":"string","description":"The name of the custom tool, used to identify it in tool calls."}},"title":"CustomToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom"]}}}]}],"description":"A function or custom tool that belongs to a namespace.","title":"NamespaceToolParamTool"},"description":"The function/custom tools available inside this namespace."}},"title":"NamespaceToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["namespace"]}}}],"description":"Groups function/custom tools under a shared namespace."},{"allOf":[{"description":"Hosted or BYOT tool search configuration for deferred tools.","type":"object","properties":{"description":{"type":["string","null"],"description":"Description shown to the model for a client-executed tool search tool."},"execution":{"oneOf":[{"type":"null"},{"description":"Whether tool search is executed by the server or by the client.","type":"string","enum":["server","client"],"title":"ToolSearchExecutionType"}]},"parameters":{"description":"Parameter schema for a client-executed tool search tool."}},"title":"ToolSearchToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["tool_search"]}}}],"description":"Hosted or BYOT tool search configuration for deferred tools."},{"allOf":[{"description":" This tool searches the web for relevant results to use in a response. Learn more about the [web search\ntool](https://platform.openai.com/docs/guides/tools-web-search).","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_content_types":{"type":["array","null"],"items":{"type":"string","description":"The type of content to search for.","enum":["text","image"],"title":"SearchContentType"},"description":"The types of content to search for."},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Defaults to `approximate` when omitted in JSON input.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_preview"]}}}],"description":" This tool searches the web for relevant results to use in a response. Learn more about the [web search\ntool](https://platform.openai.com/docs/guides/tools-web-search)."},{"allOf":[{"description":"type: web_search_preview_2025_03_11","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_content_types":{"type":["array","null"],"items":{"type":"string","description":"The type of content to search for.","enum":["text","image"],"title":"SearchContentType"},"description":"The types of content to search for."},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Defaults to `approximate` when omitted in JSON input.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_preview_2025_03_11"]}}}],"description":"type: web_search_preview_2025_03_11"},{"type":"object","description":"Allows the assistant to create, delete, or update files using unified diffs.","required":["type"],"properties":{"type":{"type":"string","enum":["apply_patch"]}}}],"description":"Definitions for model-callable tools.","title":"Tool"},"description":"The loaded tool definitions returned by the tool search output."}},"title":"ToolSearchOutputItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["tool_search_output"]}}}],"description":"A tool search output."},{"allOf":[{"description":"A description of the chain of thought used by a reasoning model while generating\na response. Be sure to include these items in your `input` to the Responses API\nfor subsequent turns of a conversation if you are manually\n[managing context](https://platform.openai.com/docs/guides/conversation-state).","type":"object","required":["summary"],"properties":{"content":{"type":["array","null"],"items":{"oneOf":[{"allOf":[{"type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The reasoning text from the model."}},"title":"ReasoningTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["reasoning_text"]}}}]}],"description":"[ReasoningTextContent] used elsewhere which adds type,\nbut here in [ReasoningItem] content field we need type too hence an enum:","title":"ReasoningItemContent"},"description":"Reasoning text content."},"encrypted_content":{"type":["string","null"],"description":"The encrypted content of the reasoning item - populated when a response is generated with\n`reasoning.encrypted_content` in the `include` parameter."},"id":{"type":["string","null"],"description":"Unique identifier of the reasoning content."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]},"summary":{"type":"array","items":{"oneOf":[{"allOf":[{"type":"object","required":["text"],"properties":{"text":{"type":"string","description":"A summary of the reasoning output from the model so far."}},"title":"SummaryTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["summary_text"]}}}]}],"title":"SummaryPart"},"description":"Reasoning summary content."}},"title":"ReasoningItem"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["reasoning"]}}}],"description":"A description of the chain of thought used by a reasoning model while generating\na response. Be sure to include these items in your `input` to the Responses API\nfor subsequent turns of a conversation if you are manually\n[managing context](https://platform.openai.com/docs/guides/conversation-state)."},{"allOf":[{"description":"A compaction item generated by the [`v1/responses/compact` API](https://platform.openai.com/docs/api-reference/responses/compact).","type":"object","required":["encrypted_content"],"properties":{"encrypted_content":{"type":"string","description":"The encrypted content of the compaction summary."},"id":{"type":["string","null"],"description":"The ID of the compaction item."}},"title":"CompactionSummaryItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["compaction"]}}}],"description":"A compaction item generated by the [`v1/responses/compact` API](https://platform.openai.com/docs/api-reference/responses/compact)."},{"allOf":[{"description":"An image generation request made by the model.","type":"object","required":["id","status"],"properties":{"id":{"type":"string","description":"The unique ID of the image generation call."},"result":{"type":["string","null"],"description":"The generated image encoded in base64."},"status":{"description":"The status of the image generation call.","type":"string","enum":["in_progress","completed","generating","failed"],"title":"ImageGenToolCallStatus"}},"title":"ImageGenToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["image_generation_call"]}}}],"description":"An image generation request made by the model."},{"allOf":[{"description":"A tool call to run code.","type":"object","required":["container_id","id","status"],"properties":{"code":{"type":["string","null"],"description":"The code to run, or null if not available."},"container_id":{"type":"string","description":"ID of the container used to run the code."},"id":{"type":"string","description":"The unique ID of the code interpreter tool call."},"outputs":{"type":["array","null"],"items":{"oneOf":[{"allOf":[{"description":"Code interpreter output logs","type":"object","required":["logs"],"properties":{"logs":{"type":"string","description":"The logs output from the code interpreter."}},"title":"CodeInterpreterOutputLogs"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["logs"]}}}],"description":"Code interpreter output logs"},{"allOf":[{"description":"Code interpreter output image","type":"object","required":["url"],"properties":{"url":{"type":"string","description":"The URL of the image output from the code interpreter."}},"title":"CodeInterpreterOutputImage"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["image"]}}}],"description":"Code interpreter output image"}],"description":"Individual result from a code interpreter: either logs or files.","title":"CodeInterpreterToolCallOutput"},"description":"The outputs generated by the code interpreter, such as logs or images.\nCan be null if no outputs are available."},"status":{"description":"The status of the code interpreter tool call.\nValid values are `in_progress`, `completed`, `incomplete`, `interpreting`, and `failed`.","type":"string","enum":["in_progress","completed","incomplete","interpreting","failed"],"title":"CodeInterpreterToolCallStatus"}},"title":"CodeInterpreterToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["code_interpreter_call"]}}}],"description":"A tool call to run code."},{"allOf":[{"description":"A tool call to run a command on the local shell.","type":"object","required":["action","call_id","id","status"],"properties":{"action":{"description":"Execute a shell command on the server.","type":"object","required":["command","env"],"properties":{"command":{"type":"array","items":{"type":"string"},"description":"The command to run."},"env":{"type":"object","description":"Environment variables to set for the command.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"timeout_ms":{"type":["integer","null"],"format":"int64","description":"Optional timeout in milliseconds for the command.","minimum":0},"user":{"type":["string","null"],"description":"Optional user to run the command as."},"working_directory":{"type":["string","null"],"description":"Optional working directory to run the command in."}},"title":"LocalShellExecAction"},"call_id":{"type":"string","description":"The unique ID of the local shell tool call generated by the model."},"id":{"type":"string","description":"The unique ID of the local shell call."},"status":{"description":"The status of the local shell call.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}},"title":"LocalShellToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["local_shell_call"]}}}],"description":"A tool call to run a command on the local shell."},{"allOf":[{"description":"The output of a local shell tool call.","type":"object","required":["id","output"],"properties":{"id":{"type":"string","description":"The unique ID of the local shell tool call generated by the model."},"output":{"type":"string","description":"A JSON string of the output of the local shell tool call."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]}},"title":"LocalShellToolCallOutput"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["local_shell_call_output"]}}}],"description":"The output of a local shell tool call."},{"allOf":[{"description":"A tool representing a request to execute one or more shell commands.","type":"object","required":["call_id","action"],"properties":{"action":{"description":"The shell commands and limits that describe how to run the tool call.","type":"object","required":["commands"],"properties":{"commands":{"type":"array","items":{"type":"string"},"description":"Ordered shell commands for the execution environment to run."},"max_output_length":{"type":["integer","null"],"format":"int64","description":"Maximum number of UTF-8 characters to capture from combined stdout and stderr output.","minimum":0},"timeout_ms":{"type":["integer","null"],"format":"int64","description":"Maximum wall-clock time in milliseconds to allow the shell commands to run.","minimum":0}},"title":"FunctionShellActionParam"},"call_id":{"type":"string","description":"The unique ID of the shell tool call generated by the model."},"environment":{"oneOf":[{"type":"null"},{"description":"The environment to execute the shell commands in.","oneOf":[{"allOf":[{"description":"Use a local computer environment.","type":"object","properties":{"skills":{"type":["array","null"],"items":{"type":"object","description":"A local skill available in a local environment.","required":["name","description","path"],"properties":{"description":{"type":"string","description":"The description of the skill."},"name":{"type":"string","description":"The name of the skill."},"path":{"type":"string","description":"The path to the directory containing the skill."}},"title":"LocalSkillParam"},"description":"An optional list of local skills."}},"title":"LocalEnvironmentParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["local"]}}}],"description":"Use a local computer environment."},{"allOf":[{"description":"Reference an existing container by ID.","type":"object","required":["container_id"],"properties":{"container_id":{"type":"string","description":"The ID of the referenced container."}},"title":"ContainerReferenceParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["container_reference"]}}}],"description":"Reference an existing container by ID."}],"title":"FunctionShellCallItemEnvironment"}]},"id":{"type":["string","null"],"description":"The unique ID of the shell tool call. Populated when this item is returned via API."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the shell call. One of `in_progress`, `completed`, or `incomplete`.","type":"string","enum":["in_progress","completed","incomplete"],"title":"FunctionShellCallItemStatus"}]}},"title":"FunctionShellCallItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["shell_call"]}}}],"description":"A tool representing a request to execute one or more shell commands."},{"allOf":[{"description":"The streamed output items emitted by a shell tool call.","type":"object","required":["call_id","output"],"properties":{"call_id":{"type":"string","description":"The unique ID of the shell tool call generated by the model."},"id":{"type":["string","null"],"description":"The unique ID of the shell tool call output. Populated when this item is returned via API."},"max_output_length":{"type":["integer","null"],"format":"int64","description":"The maximum number of UTF-8 characters captured for this shell call's combined output.","minimum":0},"output":{"type":"array","items":{"type":"object","description":"Captured stdout and stderr for a portion of a shell tool call output.","required":["stdout","stderr","outcome"],"properties":{"outcome":{"description":"The exit or timeout outcome associated with this chunk.","oneOf":[{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["timeout"]}}},{"allOf":[{"type":"object","description":"Indicates that the shell commands finished and returned an exit code.","required":["exit_code"],"properties":{"exit_code":{"type":"integer","format":"int32","description":"The exit code returned by the shell process."}},"title":"FunctionShellCallOutputExitOutcomeParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["exit"]}}}]}],"title":"FunctionShellCallOutputOutcomeParam"},"stderr":{"type":"string","description":"Captured stderr output for this chunk of the shell call."},"stdout":{"type":"string","description":"Captured stdout output for this chunk of the shell call."}},"title":"FunctionShellCallOutputContentParam"},"description":"Captured chunks of stdout and stderr output, along with their associated outcomes."}},"title":"FunctionShellCallOutputItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["shell_call_output"]}}}],"description":"The streamed output items emitted by a shell tool call."},{"allOf":[{"description":"A tool call representing a request to create, delete, or update files using diff patches.","type":"object","required":["call_id","status","operation"],"properties":{"call_id":{"type":"string","description":"The unique ID of the apply patch tool call generated by the model."},"id":{"type":["string","null"],"description":"The unique ID of the apply patch tool call. Populated when this item is returned via API."},"operation":{"description":"The specific create, delete, or update instruction for the apply_patch tool call.","oneOf":[{"allOf":[{"type":"object","description":"Instruction for creating a new file via the apply_patch tool.","required":["path","diff"],"properties":{"diff":{"type":"string","description":"Unified diff content to apply when creating the file."},"path":{"type":"string","description":"Path of the file to create relative to the workspace root."}},"title":"ApplyPatchCreateFileOperationParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["create_file"]}}}]},{"allOf":[{"type":"object","description":"Instruction for deleting an existing file via the apply_patch tool.","required":["path"],"properties":{"path":{"type":"string","description":"Path of the file to delete relative to the workspace root."}},"title":"ApplyPatchDeleteFileOperationParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["delete_file"]}}}]},{"allOf":[{"type":"object","description":"Instruction for updating an existing file via the apply_patch tool.","required":["path","diff"],"properties":{"diff":{"type":"string","description":"Unified diff content to apply to the existing file."},"path":{"type":"string","description":"Path of the file to update relative to the workspace root."}},"title":"ApplyPatchUpdateFileOperationParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["update_file"]}}}]}],"title":"ApplyPatchOperationParam"},"status":{"description":"The status of the apply patch tool call. One of `in_progress` or `completed`.","type":"string","enum":["in_progress","completed"],"title":"ApplyPatchCallStatusParam"}},"title":"ApplyPatchToolCallItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["apply_patch_call"]}}}],"description":"A tool call representing a request to create, delete, or update files using diff patches."},{"allOf":[{"description":"The streamed output emitted by an apply patch tool call.","type":"object","required":["call_id","status"],"properties":{"call_id":{"type":"string","description":"The unique ID of the apply patch tool call generated by the model."},"id":{"type":["string","null"],"description":"The unique ID of the apply patch tool call output. Populated when this item is returned via API."},"output":{"type":["string","null"],"description":"Optional human-readable log text from the apply patch tool (e.g., patch results or errors)."},"status":{"description":"The status of the apply patch tool call output. One of `completed` or `failed`.","type":"string","enum":["completed","failed"],"title":"ApplyPatchCallOutputStatusParam"}},"title":"ApplyPatchToolCallOutputItemParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["apply_patch_call_output"]}}}],"description":"The streamed output emitted by an apply patch tool call."},{"allOf":[{"description":"A list of tools available on an MCP server.","type":"object","required":["id","server_label","tools"],"properties":{"error":{"type":["string","null"],"description":"Error message if listing failed."},"id":{"type":"string","description":"The unique ID of the list."},"server_label":{"type":"string","description":"The label of the MCP server."},"tools":{"type":"array","items":{"type":"object","required":["input_schema","name"],"properties":{"annotations":{"description":"Additional annotations about the tool."},"description":{"type":["string","null"],"description":"The description of the tool."},"input_schema":{"description":"The JSON schema describing the tool's input."},"name":{"type":"string","description":"The name of the tool."}},"title":"MCPListToolsTool"},"description":"The tools available on the server."}},"title":"MCPListTools"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp_list_tools"]}}}],"description":"A list of tools available on an MCP server."},{"allOf":[{"description":"A request for human approval of a tool invocation.","type":"object","required":["arguments","id","name","server_label"],"properties":{"arguments":{"type":"string","description":"JSON string of arguments for the tool."},"id":{"type":"string","description":"The unique ID of the approval request."},"name":{"type":"string","description":"The name of the tool to run."},"server_label":{"type":"string","description":"The label of the MCP server making the request."}},"title":"MCPApprovalRequest"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp_approval_request"]}}}],"description":"A request for human approval of a tool invocation."},{"allOf":[{"description":"A response to an MCP approval request.","type":"object","required":["approval_request_id","approve"],"properties":{"approval_request_id":{"type":"string","description":"The ID of the approval request being answered."},"approve":{"type":"boolean","description":"Whether the request was approved."},"id":{"type":["string","null"],"description":"The unique ID of the approval response"},"reason":{"type":["string","null"],"description":"Optional reason for the decision."}},"title":"MCPApprovalResponse"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp_approval_response"]}}}],"description":"A response to an MCP approval request."},{"allOf":[{"description":"An invocation of a tool on an MCP server.","type":"object","required":["arguments","id","name","server_label"],"properties":{"approval_request_id":{"type":["string","null"],"description":"Unique identifier for the MCP tool call approval request. Include this value\nin a subsequent `mcp_approval_response` input to approve or reject the corresponding\ntool call."},"arguments":{"type":"string","description":"A JSON string of the arguments passed to the tool."},"error":{"type":["string","null"],"description":"Error message from the call, if any."},"id":{"type":"string","description":"The unique ID of the tool call."},"name":{"type":"string","description":"The name of the tool that was run."},"output":{"type":["string","null"],"description":"The output from the tool call."},"server_label":{"type":"string","description":"The label of the MCP server running the tool."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the tool call. One of `in_progress`, `completed`, `incomplete`,\n`calling`, or `failed`.","type":"string","enum":["in_progress","completed","incomplete","calling","failed"],"title":"MCPToolCallStatus"}]}},"title":"MCPToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp_call"]}}}],"description":"An invocation of a tool on an MCP server."},{"allOf":[{"description":"The output of a custom tool call from your code, being sent back to the model.","type":"object","required":["call_id","output"],"properties":{"call_id":{"type":"string","description":"The call ID, used to map this custom tool call output to a custom tool call."},"id":{"type":["string","null"],"description":"The unique ID of the custom tool call output in the OpenAI platform."},"output":{"description":"The output from the custom tool call generated by your code.\nCan be a string or an list of output content.","oneOf":[{"type":"string","description":"A string of the output of the custom tool call."},{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A text input to the model.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text input to the model."}},"title":"InputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_text"]}}}],"description":"A text input to the model."},{"allOf":[{"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision).","type":"object","properties":{"detail":{"description":"The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`.\nDefaults to `auto` when omitted in JSON input.","type":"string","enum":["auto","low","high","original"],"title":"ImageDetail"},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"image_url":{"type":["string","null"],"description":"The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image\nin a data URL."}},"title":"InputImageContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_image"]}}}],"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision)."},{"allOf":[{"description":"A file input to the model.","type":"object","properties":{"detail":{"oneOf":[{"type":"null"},{"description":"The detail level of the file to be sent to the model. Use `low` for the default rendering\nbehavior, or `high` to render the file at higher quality. Defaults to `low`.","type":"string","enum":["low","high"],"title":"FileInputDetail"}]},"file_data":{"type":["string","null"],"description":"The content of the file to be sent to the model."},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"file_url":{"type":["string","null"],"description":"The URL of the file to be sent to the model."},"filename":{"type":["string","null"],"description":"The name of the file to be sent to the model."}},"title":"InputFileContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_file"]}}}],"description":"A file input to the model."}],"description":"Parts of a message: text, image, file, or audio.","title":"InputContent"},"description":"Text, image, or file output of the custom tool call."}],"title":"CustomToolCallOutputOutput"}},"title":"CustomToolCallOutput"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom_tool_call_output"]}}}],"description":"The output of a custom tool call from your code, being sent back to the model."},{"allOf":[{"description":"A call to a custom tool created by the model.","type":"object","required":["call_id","input","name","id"],"properties":{"call_id":{"type":"string","description":"An identifier used to map this custom tool call to a tool call output."},"id":{"type":"string","description":"The unique ID of the custom tool call in the OpenAI platform."},"input":{"type":"string","description":"The input for the custom tool call generated by the model."},"name":{"type":"string","description":"The name of the custom tool being called."},"namespace":{"type":["string","null"],"description":"The namespace of the custom tool being called."}},"title":"CustomToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom_tool_call"]}}}],"description":"A call to a custom tool created by the model."}],"title":"Item"},{"description":"A simple, user-friendly message input (EasyInputMessage).\nSupports string content and can include assistant role for previous responses.\nMust be tried last as it's the most flexible structure.\n\nA message input to the model with a role indicating instruction following\nhierarchy. Instructions given with the `developer` or `system` role take\nprecedence over instructions given with the `user` role. Messages with the\n`assistant` role are presumed to have been generated by the model in previous\ninteractions.","type":"object","required":["type","role","content"],"properties":{"content":{"description":"Text, image, or audio input to the model, used to generate a response.\nCan also contain previous assistant responses.","oneOf":[{"type":"string","description":"A text input to the model."},{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A text input to the model.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text input to the model."}},"title":"InputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_text"]}}}],"description":"A text input to the model."},{"allOf":[{"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision).","type":"object","properties":{"detail":{"description":"The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`.\nDefaults to `auto` when omitted in JSON input.","type":"string","enum":["auto","low","high","original"],"title":"ImageDetail"},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"image_url":{"type":["string","null"],"description":"The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image\nin a data URL."}},"title":"InputImageContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_image"]}}}],"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision)."},{"allOf":[{"description":"A file input to the model.","type":"object","properties":{"detail":{"oneOf":[{"type":"null"},{"description":"The detail level of the file to be sent to the model. Use `low` for the default rendering\nbehavior, or `high` to render the file at higher quality. Defaults to `low`.","type":"string","enum":["low","high"],"title":"FileInputDetail"}]},"file_data":{"type":["string","null"],"description":"The content of the file to be sent to the model."},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"file_url":{"type":["string","null"],"description":"The URL of the file to be sent to the model."},"filename":{"type":["string","null"],"description":"The name of the file to be sent to the model."}},"title":"InputFileContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_file"]}}}],"description":"A file input to the model."}],"description":"Parts of a message: text, image, file, or audio.","title":"InputContent"},"description":"A list of one or many input items to the model, containing different content types."}],"title":"EasyInputContent"},"phase":{"oneOf":[{"type":"null"},{"description":"Labels an `assistant` message as intermediate commentary (`commentary`) or\nthe final answer (`final_answer`). Not used for user messages.","type":"string","enum":["commentary","final_answer"],"title":"MessagePhase"}]},"role":{"description":"The role of the message input. One of `user`, `assistant`, `system`, or `developer`.","type":"string","enum":["user","assistant","system","developer"],"title":"Role"},"type":{"description":"The type of the message input. Defaults to `message` when omitted in JSON input.","type":"string","enum":["message"],"title":"MessageType"}},"title":"EasyInputMessage"}],"description":"Input item that can be used in the context for generating a response.\n\nThis represents the OpenAPI `InputItem` schema which is an `anyOf`:\n1. `EasyInputMessage` - Simple, user-friendly message input (can use string content)\n2. `Item` - Structured items with proper type discrimination (including InputMessage, OutputMessage, tool calls)\n3. `ItemReferenceParam` - Reference to an existing item by ID (type can be null)\n\nUses untagged deserialization because these types overlap in structure.\nOrder matters: more specific structures are tried first.\n\n# OpenAPI Specification\nCorresponds to the `InputItem` schema: `anyOf[EasyInputMessage, Item, ItemReferenceParam]`","title":"InputItem"},"description":"A list of one or many input items to the model, containing different content types."}],"title":"Instructions"}]},"max_output_tokens":{"type":["integer","null"],"format":"int32","description":"An upper bound for the number of tokens that can be generated for a response,\nincluding visible output tokens and\n[reasoning tokens](https://platform.openai.com/docs/guides/reasoning).","minimum":0},"metadata":{"type":["object","null"],"description":"Set of 16 key-value pairs that can be attached to an object. This can be\nuseful for storing additional information about the object in a structured\nformat, and querying for objects via API or the dashboard.\n\nKeys are strings with a maximum length of 64 characters. Values are strings\nwith a maximum length of 512 characters.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"model":{"type":"string","description":"Model ID used to generate the response, like gpt-4o or o3. OpenAI offers a\nwide range of models with different capabilities, performance characteristics,\nand price points. Refer to the [model guide](https://platform.openai.com/docs/models) to browse and compare available models."},"object":{"type":"string","description":"The object type of this resource - always set to `response`."},"output":{"type":"array","items":{"oneOf":[{"allOf":[{"description":"An output message from the model.","type":"object","required":["content","id","role","status"],"properties":{"content":{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A text output from the model.","type":"object","required":["annotations","text"],"properties":{"annotations":{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A citation to a file.","type":"object","required":["file_id","filename","index"],"properties":{"file_id":{"type":"string","description":"The ID of the file."},"filename":{"type":"string","description":"The filename of the file cited."},"index":{"type":"integer","format":"int32","description":"The index of the file in the list of files.","minimum":0}},"title":"FileCitationBody"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_citation"]}}}],"description":"A citation to a file."},{"allOf":[{"description":"A citation for a web resource used to generate a model response.","type":"object","required":["end_index","start_index","title","url"],"properties":{"end_index":{"type":"integer","format":"int32","description":"The index of the last character of the URL citation in the message.","minimum":0},"start_index":{"type":"integer","format":"int32","description":"The index of the first character of the URL citation in the message.","minimum":0},"title":{"type":"string","description":"The title of the web resource."},"url":{"type":"string","description":"The URL of the web resource."}},"title":"UrlCitationBody"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["url_citation"]}}}],"description":"A citation for a web resource used to generate a model response."},{"allOf":[{"description":"A citation for a container file used to generate a model response.","type":"object","required":["container_id","end_index","file_id","filename","start_index"],"properties":{"container_id":{"type":"string","description":"The ID of the container file."},"end_index":{"type":"integer","format":"int32","description":"The index of the last character of the container file citation in the message.","minimum":0},"file_id":{"type":"string","description":"The ID of the file."},"filename":{"type":"string","description":"The filename of the container file cited."},"start_index":{"type":"integer","format":"int32","description":"The index of the first character of the container file citation in the message.","minimum":0}},"title":"ContainerFileCitationBody"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["container_file_citation"]}}}],"description":"A citation for a container file used to generate a model response."},{"allOf":[{"description":"A path to a file.","type":"object","required":["file_id","index"],"properties":{"file_id":{"type":"string","description":"The ID of the file."},"index":{"type":"integer","format":"int32","description":"The index of the file in the list of files.","minimum":0}},"title":"FilePath"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_path"]}}}],"description":"A path to a file."}],"description":"An annotation that applies to a span of output text.","title":"Annotation"},"description":"The annotations of the text output."},"logprobs":{"type":["array","null"],"items":{"type":"object","required":["bytes","logprob","token","top_logprobs"],"properties":{"bytes":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"logprob":{"type":"number","format":"double"},"token":{"type":"string"},"top_logprobs":{"type":"array","items":{"type":"object","required":["bytes","logprob","token"],"properties":{"bytes":{"type":"array","items":{"type":"integer","format":"int32","minimum":0}},"logprob":{"type":"number","format":"double"},"token":{"type":"string"}},"title":"TopLogProb"}}},"title":"LogProb"}},"text":{"type":"string","description":"The text output from the model."}},"title":"OutputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["output_text"]}}}],"description":"A text output from the model."},{"allOf":[{"description":"A refusal from the model.","type":"object","required":["refusal"],"properties":{"refusal":{"type":"string","description":"The refusal explanation from the model."}},"title":"RefusalContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["refusal"]}}}],"description":"A refusal from the model."}],"title":"OutputMessageContent"},"description":"The content of the output message."},"id":{"type":"string","description":"The unique ID of the output message."},"phase":{"oneOf":[{"type":"null"},{"description":"Labels this assistant message as intermediate commentary (`commentary`) or\nthe final answer (`final_answer`).","type":"string","enum":["commentary","final_answer"],"title":"MessagePhase"}]},"role":{"description":"The role of the output message. Always `assistant`.","type":"string","enum":["assistant"],"title":"AssistantRole"},"status":{"description":"The status of the message input. One of `in_progress`, `completed`, or\n`incomplete`. Populated when input items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}},"title":"OutputMessage"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["message"]}}}],"description":"An output message from the model."},{"allOf":[{"description":"The results of a file search tool call. See the\n[file search guide](https://platform.openai.com/docs/guides/tools-file-search)\nfor more information.","type":"object","required":["id","queries","status"],"properties":{"id":{"type":"string","description":"The unique ID of the file search tool call."},"queries":{"type":"array","items":{"type":"string"},"description":"The queries used to search for files."},"results":{"type":["array","null"],"items":{"type":"object","description":"A single result from a file search.","required":["attributes","file_id","filename","score","text"],"properties":{"attributes":{"type":"object","description":"Set of 16 key-value pairs that can be attached to an object. This can be useful for storing\nadditional information about the object in a structured format, and querying for objects\nAPI or the dashboard. Keys are strings with a maximum length of 64 characters\n. Values are strings with a maximum length of 512 characters, booleans, or numbers.","additionalProperties":{},"propertyNames":{"type":"string"}},"file_id":{"type":"string","description":"The unique ID of the file."},"filename":{"type":"string","description":"The name of the file."},"score":{"type":"number","format":"float","description":"The relevance score of the file - a value between 0 and 1."},"text":{"type":"string","description":"The text that was retrieved from the file."}},"title":"FileSearchToolCallResult"},"description":"The results of the file search tool call."},"status":{"description":"The status of the file search tool call. One of `in_progress`, `searching`,\n`incomplete`,`failed`, or `completed`.","type":"string","enum":["in_progress","searching","incomplete","failed","completed"],"title":"FileSearchToolCallStatus"}},"title":"FileSearchToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_search_call"]}}}],"description":"The results of a file search tool call. See the\n[file search guide](https://platform.openai.com/docs/guides/tools-file-search)\nfor more information."},{"allOf":[{"description":"A tool call to run a function. See the\n[function calling guide](https://platform.openai.com/docs/guides/function-calling)\nfor more information.","type":"object","required":["arguments","call_id","name"],"properties":{"arguments":{"type":"string","description":"A JSON string of the arguments to pass to the function."},"call_id":{"type":"string","description":"The unique ID of the function tool call generated by the model."},"id":{"type":["string","null"],"description":"The unique ID of the function tool call."},"name":{"type":"string","description":"The name of the function to run."},"namespace":{"type":["string","null"],"description":"The namespace of the function to run."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]}},"title":"FunctionToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function_call"]}}}],"description":"A tool call to run a function. See the\n[function calling guide](https://platform.openai.com/docs/guides/function-calling)\nfor more information."},{"allOf":[{"description":"The output of a function tool call.","type":"object","required":["call_id","output","id","status"],"properties":{"call_id":{"type":"string","description":"The unique ID of the function tool call generated by the model."},"created_by":{"type":["string","null"],"description":"The identifier of the actor that created the item."},"id":{"type":"string","description":"The unique ID of the function tool call output."},"output":{"description":"Text, image, or file output of the function tool call.","oneOf":[{"type":"string","description":"A JSON string of the output of the function tool call."},{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A text input to the model.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text input to the model."}},"title":"InputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_text"]}}}],"description":"A text input to the model."},{"allOf":[{"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision).","type":"object","properties":{"detail":{"description":"The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`.\nDefaults to `auto` when omitted in JSON input.","type":"string","enum":["auto","low","high","original"],"title":"ImageDetail"},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"image_url":{"type":["string","null"],"description":"The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image\nin a data URL."}},"title":"InputImageContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_image"]}}}],"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision)."},{"allOf":[{"description":"A file input to the model.","type":"object","properties":{"detail":{"oneOf":[{"type":"null"},{"description":"The detail level of the file to be sent to the model. Use `low` for the default rendering\nbehavior, or `high` to render the file at higher quality. Defaults to `low`.","type":"string","enum":["low","high"],"title":"FileInputDetail"}]},"file_data":{"type":["string","null"],"description":"The content of the file to be sent to the model."},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"file_url":{"type":["string","null"],"description":"The URL of the file to be sent to the model."},"filename":{"type":["string","null"],"description":"The name of the file to be sent to the model."}},"title":"InputFileContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_file"]}}}],"description":"A file input to the model."}],"description":"Parts of a message: text, image, file, or audio.","title":"InputContent"}}],"title":"FunctionCallOutput"},"status":{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.","type":"string","enum":["in_progress","completed","incomplete"],"title":"FunctionCallOutputStatusEnum"}},"title":"FunctionToolCallOutputResource"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function_call_output"]}}}],"description":"The output of a function tool call."},{"allOf":[{"description":"The results of a web search tool call. See the\n[web search guide](https://platform.openai.com/docs/guides/tools-web-search)\nfor more information.","type":"object","required":["id","status"],"properties":{"action":{"oneOf":[{"type":"null"},{"description":"An object describing the specific action taken in this web search call. Includes\ndetails on how the model used the web (search, open_page, find, find_in_page).\n\nThis is optional because `response.output_item.added` events can include\nin-progress web search calls before OpenAI has populated the action.\nSee .","oneOf":[{"allOf":[{"description":"Action type \"search\" - Performs a web search query.","type":"object","required":["query"],"properties":{"query":{"type":"string","description":"The search query."},"sources":{"type":["array","null"],"items":{"type":"object","required":["type","url"],"properties":{"type":{"type":"string","description":"The type of source. Always `url`."},"url":{"type":"string","description":"The URL of the source."}},"title":"WebSearchActionSearchSource"},"description":"The sources used in the search."}},"title":"WebSearchActionSearch"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["search"]}}}],"description":"Action type \"search\" - Performs a web search query."},{"allOf":[{"description":"Action type \"open_page\" - Opens a specific URL from search results.","type":"object","properties":{"url":{"type":["string","null"],"description":"The URL opened by the model."}},"title":"WebSearchActionOpenPage"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["open_page"]}}}],"description":"Action type \"open_page\" - Opens a specific URL from search results."},{"allOf":[{"description":"Action type \"find\": Searches for a pattern within a loaded page.","type":"object","required":["url","pattern"],"properties":{"pattern":{"type":"string","description":"The pattern or text to search for within the page."},"url":{"type":"string","description":"The URL of the page searched for the pattern."}},"title":"WebSearchActionFind"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["find"]}}}],"description":"Action type \"find\": Searches for a pattern within a loaded page."},{"allOf":[{"description":"Action type \"find_in_page\": ","type":"object","required":["url","pattern"],"properties":{"pattern":{"type":"string","description":"The pattern or text to search for within the page."},"url":{"type":"string","description":"The URL of the page searched for the pattern."}},"title":"WebSearchActionFind"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["find_in_page"]}}}],"description":"Action type \"find_in_page\": "}],"title":"WebSearchToolCallAction"}]},"id":{"type":"string","description":"The unique ID of the web search tool call."},"status":{"description":"The status of the web search tool call.","type":"string","enum":["in_progress","searching","completed","failed"],"title":"WebSearchToolCallStatus"}},"title":"WebSearchToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_call"]}}}],"description":"The results of a web search tool call. See the\n[web search guide](https://platform.openai.com/docs/guides/tools-web-search)\nfor more information."},{"allOf":[{"description":"A tool call to a computer use tool. See the\n[computer use guide](https://platform.openai.com/docs/guides/tools-computer-use)\nfor more information.","type":"object","required":["call_id","id","pending_safety_checks","status"],"properties":{"action":{"oneOf":[{"type":"null"},{"oneOf":[{"allOf":[{"description":"A click action.","type":"object","required":["button","x","y"],"properties":{"button":{"description":"Indicates which mouse button was pressed during the click. One of `left`,\n`right`, `wheel`, `back`, or `forward`.","type":"string","enum":["left","right","wheel","back","forward"],"title":"ClickButtonType"},"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while clicking."},"x":{"type":"integer","format":"int32","description":"The x-coordinate where the click occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the click occurred."}},"title":"ClickParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["click"]}}}],"description":"A click action."},{"allOf":[{"description":"A double click action.","type":"object","required":["x","y"],"properties":{"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while double clicking."},"x":{"type":"integer","format":"int32","description":"The x-coordinate where the double click occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the double click occurred."}},"title":"DoubleClickAction"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["double_click"]}}}],"description":"A double click action."},{"allOf":[{"description":"A drag action.","type":"object","required":["path"],"properties":{"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while dragging the mouse."},"path":{"type":"array","items":{"type":"object","description":"An x/y coordinate pair.","required":["x","y"],"properties":{"x":{"type":"integer","format":"int32","description":"The x-coordinate."},"y":{"type":"integer","format":"int32","description":"The y-coordinate."}},"title":"CoordParam"},"description":"An array of coordinates representing the path of the drag action."}},"title":"DragParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["drag"]}}}],"description":"A drag action."},{"allOf":[{"description":"A collection of keypresses the model would like to perform.","type":"object","required":["keys"],"properties":{"keys":{"type":"array","items":{"type":"string"},"description":"The combination of keys the model is requesting to be pressed.\nThis is an array of strings, each representing a key."}},"title":"KeyPressAction"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["keypress"]}}}],"description":"A collection of keypresses the model would like to perform."},{"allOf":[{"description":"A mouse move action.","type":"object","required":["x","y"],"properties":{"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while moving the mouse."},"x":{"type":"integer","format":"int32","description":"The x-coordinate to move to."},"y":{"type":"integer","format":"int32","description":"The y-coordinate to move to."}},"title":"MoveParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["move"]}}}],"description":"A mouse move action."},{"type":"object","description":"A screenshot action.","required":["type"],"properties":{"type":{"type":"string","enum":["screenshot"]}}},{"allOf":[{"description":"A scroll action.","type":"object","required":["scroll_x","scroll_y","x","y"],"properties":{"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while scrolling."},"scroll_x":{"type":"integer","format":"int32","description":"The horizontal scroll distance."},"scroll_y":{"type":"integer","format":"int32","description":"The vertical scroll distance."},"x":{"type":"integer","format":"int32","description":"The x-coordinate where the scroll occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the scroll occurred."}},"title":"ScrollParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["scroll"]}}}],"description":"A scroll action."},{"allOf":[{"description":"An action to type in text.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text to type."}},"title":"TypeParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["type"]}}}],"description":"An action to type in text."},{"type":"object","description":"A wait action.","required":["type"],"properties":{"type":{"type":"string","enum":["wait"]}}}],"description":"Represents all user‐triggered actions.","title":"ComputerAction"}]},"actions":{"type":["array","null"],"items":{"oneOf":[{"allOf":[{"description":"A click action.","type":"object","required":["button","x","y"],"properties":{"button":{"description":"Indicates which mouse button was pressed during the click. One of `left`,\n`right`, `wheel`, `back`, or `forward`.","type":"string","enum":["left","right","wheel","back","forward"],"title":"ClickButtonType"},"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while clicking."},"x":{"type":"integer","format":"int32","description":"The x-coordinate where the click occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the click occurred."}},"title":"ClickParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["click"]}}}],"description":"A click action."},{"allOf":[{"description":"A double click action.","type":"object","required":["x","y"],"properties":{"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while double clicking."},"x":{"type":"integer","format":"int32","description":"The x-coordinate where the double click occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the double click occurred."}},"title":"DoubleClickAction"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["double_click"]}}}],"description":"A double click action."},{"allOf":[{"description":"A drag action.","type":"object","required":["path"],"properties":{"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while dragging the mouse."},"path":{"type":"array","items":{"type":"object","description":"An x/y coordinate pair.","required":["x","y"],"properties":{"x":{"type":"integer","format":"int32","description":"The x-coordinate."},"y":{"type":"integer","format":"int32","description":"The y-coordinate."}},"title":"CoordParam"},"description":"An array of coordinates representing the path of the drag action."}},"title":"DragParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["drag"]}}}],"description":"A drag action."},{"allOf":[{"description":"A collection of keypresses the model would like to perform.","type":"object","required":["keys"],"properties":{"keys":{"type":"array","items":{"type":"string"},"description":"The combination of keys the model is requesting to be pressed.\nThis is an array of strings, each representing a key."}},"title":"KeyPressAction"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["keypress"]}}}],"description":"A collection of keypresses the model would like to perform."},{"allOf":[{"description":"A mouse move action.","type":"object","required":["x","y"],"properties":{"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while moving the mouse."},"x":{"type":"integer","format":"int32","description":"The x-coordinate to move to."},"y":{"type":"integer","format":"int32","description":"The y-coordinate to move to."}},"title":"MoveParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["move"]}}}],"description":"A mouse move action."},{"type":"object","description":"A screenshot action.","required":["type"],"properties":{"type":{"type":"string","enum":["screenshot"]}}},{"allOf":[{"description":"A scroll action.","type":"object","required":["scroll_x","scroll_y","x","y"],"properties":{"keys":{"type":["array","null"],"items":{"type":"string"},"description":"The keys being held while scrolling."},"scroll_x":{"type":"integer","format":"int32","description":"The horizontal scroll distance."},"scroll_y":{"type":"integer","format":"int32","description":"The vertical scroll distance."},"x":{"type":"integer","format":"int32","description":"The x-coordinate where the scroll occurred."},"y":{"type":"integer","format":"int32","description":"The y-coordinate where the scroll occurred."}},"title":"ScrollParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["scroll"]}}}],"description":"A scroll action."},{"allOf":[{"description":"An action to type in text.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text to type."}},"title":"TypeParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["type"]}}}],"description":"An action to type in text."},{"type":"object","description":"A wait action.","required":["type"],"properties":{"type":{"type":"string","enum":["wait"]}}}],"description":"Represents all user‐triggered actions.","title":"ComputerAction"},"description":"Flattened batched actions for `computer_use`. Each action includes a\n`type` discriminator and action-specific fields."},"call_id":{"type":"string","description":"An identifier used when responding to the tool call with output."},"id":{"type":"string","description":"The unique ID of the computer call."},"pending_safety_checks":{"type":"array","items":{"type":"object","required":["id"],"properties":{"code":{"type":["string","null"],"description":"The type of the pending safety check."},"id":{"type":"string","description":"The ID of the pending safety check."},"message":{"type":["string","null"],"description":"Details about the pending safety check."}},"title":"ComputerCallSafetyCheckParam"},"description":"The pending safety checks for the computer call."},"status":{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}},"title":"ComputerToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer_call"]}}}],"description":"A tool call to a computer use tool. See the\n[computer use guide](https://platform.openai.com/docs/guides/tools-computer-use)\nfor more information."},{"allOf":[{"description":"The output of a computer tool call.","type":"object","required":["call_id","output","id","status"],"properties":{"acknowledged_safety_checks":{"type":["array","null"],"items":{"type":"object","required":["id"],"properties":{"code":{"type":["string","null"],"description":"The type of the pending safety check."},"id":{"type":"string","description":"The ID of the pending safety check."},"message":{"type":["string","null"],"description":"Details about the pending safety check."}},"title":"ComputerCallSafetyCheckParam"},"description":"The safety checks reported by the API that have been acknowledged by the developer."},"call_id":{"type":"string","description":"The ID of the computer tool call that produced the output."},"created_by":{"type":["string","null"],"description":"The identifier of the actor that created the item."},"id":{"type":"string","description":"The unique ID of the computer tool call output."},"output":{"description":"A computer screenshot image used with the computer use tool.","type":"object","required":["type"],"properties":{"file_id":{"type":["string","null"],"description":"The identifier of an uploaded file that contains the screenshot."},"image_url":{"type":["string","null"],"description":"The URL of the screenshot image."},"type":{"description":"Specifies the event type. For a computer screenshot, this property is always\nset to `computer_screenshot`.","type":"string","enum":["computer_screenshot"],"title":"ComputerScreenshotImageType"}},"title":"ComputerScreenshotImage"},"status":{"description":"The status of the item returned by the API.","type":"string","enum":["in_progress","completed","incomplete","failed"],"title":"ComputerCallOutputStatus"}},"title":"ComputerToolCallOutputResource"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer_call_output"]}}}],"description":"The output of a computer tool call."},{"allOf":[{"description":"A description of the chain of thought used by a reasoning model while generating\na response. Be sure to include these items in your `input` to the Responses API for\nsubsequent turns of a conversation if you are manually\n[managing context](https://platform.openai.com/docs/guides/conversation-state).","type":"object","required":["summary"],"properties":{"content":{"type":["array","null"],"items":{"oneOf":[{"allOf":[{"type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The reasoning text from the model."}},"title":"ReasoningTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["reasoning_text"]}}}]}],"description":"[ReasoningTextContent] used elsewhere which adds type,\nbut here in [ReasoningItem] content field we need type too hence an enum:","title":"ReasoningItemContent"},"description":"Reasoning text content."},"encrypted_content":{"type":["string","null"],"description":"The encrypted content of the reasoning item - populated when a response is generated with\n`reasoning.encrypted_content` in the `include` parameter."},"id":{"type":["string","null"],"description":"Unique identifier of the reasoning content."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.\nPopulated when items are returned via API.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}]},"summary":{"type":"array","items":{"oneOf":[{"allOf":[{"type":"object","required":["text"],"properties":{"text":{"type":"string","description":"A summary of the reasoning output from the model so far."}},"title":"SummaryTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["summary_text"]}}}]}],"title":"SummaryPart"},"description":"Reasoning summary content."}},"title":"ReasoningItem"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["reasoning"]}}}],"description":"A description of the chain of thought used by a reasoning model while generating\na response. Be sure to include these items in your `input` to the Responses API for\nsubsequent turns of a conversation if you are manually\n[managing context](https://platform.openai.com/docs/guides/conversation-state)."},{"allOf":[{"description":"A compaction item generated by the [`v1/responses/compact` API](https://platform.openai.com/docs/api-reference/responses/compact).","type":"object","required":["id","encrypted_content"],"properties":{"created_by":{"type":["string","null"],"description":"The identifier of the actor that created the item."},"encrypted_content":{"type":"string","description":"The encrypted content that was produced by compaction."},"id":{"type":"string","description":"The unique ID of the compaction item."}},"title":"CompactionBody"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["compaction"]}}}],"description":"A compaction item generated by the [`v1/responses/compact` API](https://platform.openai.com/docs/api-reference/responses/compact)."},{"allOf":[{"description":"An image generation request made by the model.","type":"object","required":["id","status"],"properties":{"id":{"type":"string","description":"The unique ID of the image generation call."},"result":{"type":["string","null"],"description":"The generated image encoded in base64."},"status":{"description":"The status of the image generation call.","type":"string","enum":["in_progress","completed","generating","failed"],"title":"ImageGenToolCallStatus"}},"title":"ImageGenToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["image_generation_call"]}}}],"description":"An image generation request made by the model."},{"allOf":[{"description":"A tool call to run code.","type":"object","required":["container_id","id","status"],"properties":{"code":{"type":["string","null"],"description":"The code to run, or null if not available."},"container_id":{"type":"string","description":"ID of the container used to run the code."},"id":{"type":"string","description":"The unique ID of the code interpreter tool call."},"outputs":{"type":["array","null"],"items":{"oneOf":[{"allOf":[{"description":"Code interpreter output logs","type":"object","required":["logs"],"properties":{"logs":{"type":"string","description":"The logs output from the code interpreter."}},"title":"CodeInterpreterOutputLogs"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["logs"]}}}],"description":"Code interpreter output logs"},{"allOf":[{"description":"Code interpreter output image","type":"object","required":["url"],"properties":{"url":{"type":"string","description":"The URL of the image output from the code interpreter."}},"title":"CodeInterpreterOutputImage"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["image"]}}}],"description":"Code interpreter output image"}],"description":"Individual result from a code interpreter: either logs or files.","title":"CodeInterpreterToolCallOutput"},"description":"The outputs generated by the code interpreter, such as logs or images.\nCan be null if no outputs are available."},"status":{"description":"The status of the code interpreter tool call.\nValid values are `in_progress`, `completed`, `incomplete`, `interpreting`, and `failed`.","type":"string","enum":["in_progress","completed","incomplete","interpreting","failed"],"title":"CodeInterpreterToolCallStatus"}},"title":"CodeInterpreterToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["code_interpreter_call"]}}}],"description":"A tool call to run code."},{"allOf":[{"description":"A tool call to run a command on the local shell.","type":"object","required":["action","call_id","id","status"],"properties":{"action":{"description":"Execute a shell command on the server.","type":"object","required":["command","env"],"properties":{"command":{"type":"array","items":{"type":"string"},"description":"The command to run."},"env":{"type":"object","description":"Environment variables to set for the command.","additionalProperties":{"type":"string"},"propertyNames":{"type":"string"}},"timeout_ms":{"type":["integer","null"],"format":"int64","description":"Optional timeout in milliseconds for the command.","minimum":0},"user":{"type":["string","null"],"description":"Optional user to run the command as."},"working_directory":{"type":["string","null"],"description":"Optional working directory to run the command in."}},"title":"LocalShellExecAction"},"call_id":{"type":"string","description":"The unique ID of the local shell tool call generated by the model."},"id":{"type":"string","description":"The unique ID of the local shell call."},"status":{"description":"The status of the local shell call.","type":"string","enum":["in_progress","completed","incomplete"],"title":"OutputStatus"}},"title":"LocalShellToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["local_shell_call"]}}}],"description":"A tool call to run a command on the local shell."},{"allOf":[{"description":"A tool call that executes one or more shell commands in a managed environment.","type":"object","required":["id","call_id","action","status"],"properties":{"action":{"description":"The shell commands and limits that describe how to run the tool call.","type":"object","required":["commands"],"properties":{"commands":{"type":"array","items":{"type":"string"},"description":"A list of commands to run."},"max_output_length":{"type":["integer","null"],"format":"int64","description":"Optional maximum number of characters to return from each command.","minimum":0},"timeout_ms":{"type":["integer","null"],"format":"int64","description":"Optional timeout in milliseconds for the commands.","minimum":0}},"title":"FunctionShellAction"},"call_id":{"type":"string","description":"The unique ID of the function shell tool call generated by the model."},"created_by":{"type":["string","null"],"description":"The ID of the entity that created this tool call."},"environment":{"oneOf":[{"type":"null"},{"description":"The environment in which the shell commands were executed.","oneOf":[{"type":"object","description":"A local computer environment.","required":["type"],"properties":{"type":{"type":"string","enum":["local"]}}},{"allOf":[{"description":"A referenced container.","type":"object","required":["container_id"],"properties":{"container_id":{"type":"string","description":"The ID of the referenced container."}},"title":"ContainerReferenceResource"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["container_reference"]}}}],"description":"A referenced container."}],"title":"FunctionShellCallEnvironment"}]},"id":{"type":"string","description":"The unique ID of the function shell tool call. Populated when this item is returned via API."},"status":{"description":"The status of the shell call. One of `in_progress`, `completed`, or `incomplete`.","type":"string","enum":["in_progress","completed","incomplete"],"title":"FunctionShellCallStatus"}},"title":"FunctionShellCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["shell_call"]}}}],"description":"A tool call that executes one or more shell commands in a managed environment."},{"allOf":[{"description":"The output of a shell tool call.","type":"object","required":["id","call_id","status","output"],"properties":{"call_id":{"type":"string","description":"The unique ID of the shell tool call generated by the model."},"created_by":{"type":["string","null"],"description":"The identifier of the actor that created the item."},"id":{"type":"string","description":"The unique ID of the shell call output. Populated when this item is returned via API."},"max_output_length":{"type":["integer","null"],"format":"int64","description":"The maximum length of the shell command output. This is generated by the model and should be\npassed back with the raw output.","minimum":0},"output":{"type":"array","items":{"allOf":[{"description":"Represents either an exit outcome (with an exit code) or a timeout outcome for a shell call output chunk.","oneOf":[{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["timeout"]}}},{"allOf":[{"type":"object","description":"Indicates that the shell commands finished and returned an exit code.","required":["exit_code"],"properties":{"exit_code":{"type":"integer","format":"int32","description":"Exit code from the shell process."}},"title":"FunctionShellCallOutputExitOutcome"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["exit"]}}}]}],"title":"FunctionShellCallOutputOutcome"},{"type":"object","required":["stdout","stderr"],"properties":{"created_by":{"type":["string","null"],"description":"The identifier of the actor that created the item."},"stderr":{"type":"string","description":"The standard error output that was captured."},"stdout":{"type":"string","description":"The standard output that was captured."}}}],"description":"The content of a shell tool call output that was emitted.","title":"FunctionShellCallOutputContent"},"description":"An array of shell call output contents"},"status":{"description":"The status of the shell call output. One of `in_progress`, `completed`, or `incomplete`.","type":"string","enum":["in_progress","completed","incomplete"],"title":"FunctionShellCallOutputStatusEnum"}},"title":"FunctionShellCallOutput"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["shell_call_output"]}}}],"description":"The output of a shell tool call."},{"allOf":[{"description":"A tool call that applies file diffs by creating, deleting, or updating files.","type":"object","required":["id","call_id","status","operation"],"properties":{"call_id":{"type":"string","description":"The unique ID of the apply patch tool call generated by the model."},"created_by":{"type":["string","null"],"description":"The ID of the entity that created this tool call."},"id":{"type":"string","description":"The unique ID of the apply patch tool call. Populated when this item is returned via API."},"operation":{"description":"One of the create_file, delete_file, or update_file operations applied via apply_patch.","oneOf":[{"allOf":[{"type":"object","description":"Instruction describing how to create a file via the apply_patch tool.","required":["path","diff"],"properties":{"diff":{"type":"string","description":"Diff to apply."},"path":{"type":"string","description":"Path of the file to create."}},"title":"ApplyPatchCreateFileOperation"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["create_file"]}}}]},{"allOf":[{"type":"object","description":"Instruction describing how to delete a file via the apply_patch tool.","required":["path"],"properties":{"path":{"type":"string","description":"Path of the file to delete."}},"title":"ApplyPatchDeleteFileOperation"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["delete_file"]}}}]},{"allOf":[{"type":"object","description":"Instruction describing how to update a file via the apply_patch tool.","required":["path","diff"],"properties":{"diff":{"type":"string","description":"Diff to apply."},"path":{"type":"string","description":"Path of the file to update."}},"title":"ApplyPatchUpdateFileOperation"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["update_file"]}}}]}],"title":"ApplyPatchOperation"},"status":{"description":"The status of the apply patch tool call. One of `in_progress` or `completed`.","type":"string","enum":["in_progress","completed"],"title":"ApplyPatchCallStatus"}},"title":"ApplyPatchToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["apply_patch_call"]}}}],"description":"A tool call that applies file diffs by creating, deleting, or updating files."},{"allOf":[{"description":"The output emitted by an apply patch tool call.","type":"object","required":["id","call_id","status"],"properties":{"call_id":{"type":"string","description":"The unique ID of the apply patch tool call generated by the model."},"created_by":{"type":["string","null"],"description":"The ID of the entity that created this tool call output."},"id":{"type":"string","description":"The unique ID of the apply patch tool call output. Populated when this item is returned via API."},"output":{"type":["string","null"],"description":"Optional textual output returned by the apply patch tool."},"status":{"description":"The status of the apply patch tool call output. One of `completed` or `failed`.","type":"string","enum":["completed","failed"],"title":"ApplyPatchCallOutputStatus"}},"title":"ApplyPatchToolCallOutput"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["apply_patch_call_output"]}}}],"description":"The output emitted by an apply patch tool call."},{"allOf":[{"description":"An invocation of a tool on an MCP server.","type":"object","required":["arguments","id","name","server_label"],"properties":{"approval_request_id":{"type":["string","null"],"description":"Unique identifier for the MCP tool call approval request. Include this value\nin a subsequent `mcp_approval_response` input to approve or reject the corresponding\ntool call."},"arguments":{"type":"string","description":"A JSON string of the arguments passed to the tool."},"error":{"type":["string","null"],"description":"Error message from the call, if any."},"id":{"type":"string","description":"The unique ID of the tool call."},"name":{"type":"string","description":"The name of the tool that was run."},"output":{"type":["string","null"],"description":"The output from the tool call."},"server_label":{"type":"string","description":"The label of the MCP server running the tool."},"status":{"oneOf":[{"type":"null"},{"description":"The status of the tool call. One of `in_progress`, `completed`, `incomplete`,\n`calling`, or `failed`.","type":"string","enum":["in_progress","completed","incomplete","calling","failed"],"title":"MCPToolCallStatus"}]}},"title":"MCPToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp_call"]}}}],"description":"An invocation of a tool on an MCP server."},{"allOf":[{"description":"A list of tools available on an MCP server.","type":"object","required":["id","server_label","tools"],"properties":{"error":{"type":["string","null"],"description":"Error message if listing failed."},"id":{"type":"string","description":"The unique ID of the list."},"server_label":{"type":"string","description":"The label of the MCP server."},"tools":{"type":"array","items":{"type":"object","required":["input_schema","name"],"properties":{"annotations":{"description":"Additional annotations about the tool."},"description":{"type":["string","null"],"description":"The description of the tool."},"input_schema":{"description":"The JSON schema describing the tool's input."},"name":{"type":"string","description":"The name of the tool."}},"title":"MCPListToolsTool"},"description":"The tools available on the server."}},"title":"MCPListTools"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp_list_tools"]}}}],"description":"A list of tools available on an MCP server."},{"allOf":[{"description":"A request for human approval of a tool invocation.","type":"object","required":["arguments","id","name","server_label"],"properties":{"arguments":{"type":"string","description":"JSON string of arguments for the tool."},"id":{"type":"string","description":"The unique ID of the approval request."},"name":{"type":"string","description":"The name of the tool to run."},"server_label":{"type":"string","description":"The label of the MCP server making the request."}},"title":"MCPApprovalRequest"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp_approval_request"]}}}],"description":"A request for human approval of a tool invocation."},{"allOf":[{"description":"A call to a custom tool created by the model.","type":"object","required":["call_id","input","name","id"],"properties":{"call_id":{"type":"string","description":"An identifier used to map this custom tool call to a tool call output."},"id":{"type":"string","description":"The unique ID of the custom tool call in the OpenAI platform."},"input":{"type":"string","description":"The input for the custom tool call generated by the model."},"name":{"type":"string","description":"The name of the custom tool being called."},"namespace":{"type":["string","null"],"description":"The namespace of the custom tool being called."}},"title":"CustomToolCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom_tool_call"]}}}],"description":"A call to a custom tool created by the model."},{"allOf":[{"description":"The output of a custom tool call.","type":"object","required":["call_id","output","id","status"],"properties":{"call_id":{"type":"string","description":"The call ID, used to map this custom tool call output to a custom tool call."},"created_by":{"type":["string","null"],"description":"The identifier of the actor that created the item."},"id":{"type":"string","description":"The unique ID of the custom tool call output item."},"output":{"description":"The output from the custom tool call generated by your code.\nCan be a string or a list of output content.","oneOf":[{"type":"string","description":"A string of the output of the custom tool call."},{"type":"array","items":{"oneOf":[{"allOf":[{"description":"A text input to the model.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text input to the model."}},"title":"InputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_text"]}}}],"description":"A text input to the model."},{"allOf":[{"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision).","type":"object","properties":{"detail":{"description":"The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`.\nDefaults to `auto` when omitted in JSON input.","type":"string","enum":["auto","low","high","original"],"title":"ImageDetail"},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"image_url":{"type":["string","null"],"description":"The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image\nin a data URL."}},"title":"InputImageContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_image"]}}}],"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision)."},{"allOf":[{"description":"A file input to the model.","type":"object","properties":{"detail":{"oneOf":[{"type":"null"},{"description":"The detail level of the file to be sent to the model. Use `low` for the default rendering\nbehavior, or `high` to render the file at higher quality. Defaults to `low`.","type":"string","enum":["low","high"],"title":"FileInputDetail"}]},"file_data":{"type":["string","null"],"description":"The content of the file to be sent to the model."},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"file_url":{"type":["string","null"],"description":"The URL of the file to be sent to the model."},"filename":{"type":["string","null"],"description":"The name of the file to be sent to the model."}},"title":"InputFileContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_file"]}}}],"description":"A file input to the model."}],"description":"Parts of a message: text, image, file, or audio.","title":"InputContent"},"description":"Text, image, or file output of the custom tool call."}],"title":"CustomToolCallOutputOutput"},"status":{"description":"The status of the item. One of `in_progress`, `completed`, or `incomplete`.","type":"string","enum":["in_progress","completed","incomplete"],"title":"FunctionCallOutputStatusEnum"}},"title":"CustomToolCallOutputResource"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom_tool_call_output"]}}}],"description":"The output of a custom tool call."},{"allOf":[{"description":"A tool search call.","type":"object","required":["id","execution","arguments","status"],"properties":{"arguments":{"description":"Arguments used for the tool search call."},"call_id":{"type":["string","null"],"description":"The unique ID of the tool search call generated by the model."},"created_by":{"type":["string","null"],"description":"The identifier of the actor that created the item."},"execution":{"description":"Whether tool search was executed by the server or by the client.","type":"string","enum":["server","client"],"title":"ToolSearchExecutionType"},"id":{"type":"string","description":"The unique ID of the tool search call item."},"status":{"description":"The status of the tool search call item.","type":"string","enum":["in_progress","completed","incomplete"],"title":"FunctionCallStatus"}},"title":"ToolSearchCall"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["tool_search_call"]}}}],"description":"A tool search call."},{"allOf":[{"description":"A tool search output.","type":"object","required":["id","execution","tools","status"],"properties":{"call_id":{"type":["string","null"],"description":"The unique ID of the tool search call generated by the model."},"created_by":{"type":["string","null"],"description":"The identifier of the actor that created the item."},"execution":{"description":"Whether tool search was executed by the server or by the client.","type":"string","enum":["server","client"],"title":"ToolSearchExecutionType"},"id":{"type":"string","description":"The unique ID of the tool search output item."},"status":{"description":"The status of the tool search output item.","type":"string","enum":["in_progress","completed","incomplete"],"title":"FunctionCallOutputStatusEnum"},"tools":{"type":"array","items":{"oneOf":[{"allOf":[{"description":"Defines a function in your own code the model can choose to call. Learn more about [function\ncalling](https://platform.openai.com/docs/guides/tools).","type":"object","required":["name"],"properties":{"defer_loading":{"type":["boolean","null"],"description":"Whether this function is deferred and loaded via tool search."},"description":{"type":["string","null"],"description":"A description of the function. Used by the model to determine whether or not to call the\nfunction."},"name":{"type":"string","description":"The name of the function to call."},"parameters":{"description":"A JSON schema object describing the parameters of the function."},"strict":{"type":["boolean","null"],"description":"Whether to enforce strict parameter validation. Default `true`."}},"title":"FunctionTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function"]}}}],"description":"Defines a function in your own code the model can choose to call. Learn more about [function\ncalling](https://platform.openai.com/docs/guides/tools)."},{"allOf":[{"description":"A tool that searches for relevant content from uploaded files. Learn more about the [file search\ntool](https://platform.openai.com/docs/guides/tools-file-search).","type":"object","required":["vector_store_ids"],"properties":{"filters":{"oneOf":[{"type":"null"},{"description":"A filter to apply.","oneOf":[{"description":"A filter used to compare a specified attribute key to a given value using a defined\ncomparison operation.","type":"object","required":["type","key","value"],"properties":{"key":{"type":"string","description":"The key to compare against the value."},"type":{"description":"Specifies the comparison operator: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`.\n- `eq`: equals\n- `ne`: not equal\n- `gt`: greater than\n- `gte`: greater than or equal\n- `lt`: less than\n- `lte`: less than or equal\n- `in`: in\n- `nin`: not in","type":"string","enum":["eq","ne","gt","gte","lt","lte","in","nin"],"title":"ComparisonType"},"value":{"description":"The value to compare against the attribute key; supports string, number, or boolean types."}},"title":"ComparisonFilter"},{"description":"Combine multiple filters using `and` or `or`.","type":"object","required":["type","filters"],"properties":{"filters":{"type":"array","items":{"oneOf":"circular()","description":"Filters for file search.","title":"Filter"},"description":"Array of filters to combine. Items can be ComparisonFilter or CompoundFilter."},"type":{"type":"string","enum":["and","or"],"description":"'Type of operation: `and` or `or`.'"}},"title":"CompoundFilter"}],"title":"Filter"}]},"max_num_results":{"type":["integer","null"],"format":"int32","description":"The maximum number of results to return. This number should be between 1 and 50 inclusive.","minimum":0},"ranking_options":{"oneOf":[{"type":"null"},{"description":"Ranking options for search.","type":"object","required":["ranker"],"properties":{"hybrid_search":{"oneOf":[{"type":"null"},{"description":"Weights that control how reciprocal rank fusion balances semantic embedding matches versus\nsparse keyword matches when hybrid search is enabled.","type":"object","required":["embedding_weight","text_weight"],"properties":{"embedding_weight":{"type":"number","format":"float","description":"The weight of the embedding in the reciprocal ranking fusion."},"text_weight":{"type":"number","format":"float","description":"The weight of the text in the reciprocal ranking fusion."}},"title":"HybridSearch"}]},"ranker":{"description":"The ranker to use for the file search.","type":"string","enum":["auto","default-2024-11-15"],"title":"RankVersionType"},"score_threshold":{"type":["number","null"],"format":"float","description":"The score threshold for the file search, a number between 0 and 1. Numbers closer to 1 will\nattempt to return only the most relevant results, but may return fewer results."}},"title":"RankingOptions"}]},"vector_store_ids":{"type":"array","items":{"type":"string"},"description":"The IDs of the vector stores to search."}},"title":"FileSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_search"]}}}],"description":"A tool that searches for relevant content from uploaded files. Learn more about the [file search\ntool](https://platform.openai.com/docs/guides/tools-file-search)."},{"allOf":[{"description":"A tool that controls a virtual computer. Learn more about the [computer\nuse tool](https://platform.openai.com/docs/guides/tools-computer-use).","type":"object","required":["environment","display_width","display_height"],"properties":{"display_height":{"type":"integer","format":"int32","description":"The height of the computer display.","minimum":0},"display_width":{"type":"integer","format":"int32","description":"The width of the computer display.","minimum":0},"environment":{"description":"The type of computer environment to control.","type":"string","enum":["windows","mac","linux","ubuntu","browser"],"title":"ComputerEnvironment"}},"title":"ComputerUsePreviewTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer_use_preview"]}}}],"description":"A tool that controls a virtual computer. Learn more about the [computer\nuse tool](https://platform.openai.com/docs/guides/tools-computer-use)."},{"allOf":[{"description":"Search the Internet for sources related to the prompt. Learn more about the\n[web search tool](https://platform.openai.com/docs/guides/tools-web-search).","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_content_types":{"type":["array","null"],"items":{"type":"string","description":"The type of content to search for.","enum":["text","image"],"title":"SearchContentType"},"description":"The types of content to search for."},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Defaults to `approximate` when omitted in JSON input.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search"]}}}],"description":"Search the Internet for sources related to the prompt. Learn more about the\n[web search tool](https://platform.openai.com/docs/guides/tools-web-search)."},{"allOf":[{"description":"type: web_search_2025_08_26","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_content_types":{"type":["array","null"],"items":{"type":"string","description":"The type of content to search for.","enum":["text","image"],"title":"SearchContentType"},"description":"The types of content to search for."},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Defaults to `approximate` when omitted in JSON input.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_2025_08_26"]}}}],"description":"type: web_search_2025_08_26"},{"allOf":[{"description":"Give the model access to additional tools via remote Model Context Protocol\n(MCP) servers. [Learn more about MCP](https://platform.openai.com/docs/guides/tools-remote-mcp).","type":"object","required":["server_label"],"properties":{"allowed_tools":{"oneOf":[{"type":"null"},{"description":"List of allowed tool names or a filter object.","oneOf":[{"type":"array","items":{"type":"string"},"description":"A string array of allowed tool names"},{"description":"A filter object to specify which tools are allowed.","type":"object","properties":{"read_only":{"type":["boolean","null"],"description":"Indicates whether or not a tool modifies data or is read-only.\nIf an MCP server is annotated with [readOnlyHint](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\nit will match this filter."},"tool_names":{"type":["array","null"],"items":{"type":"string"},"description":"List of allowed tool names."}},"title":"MCPToolFilter"}],"title":"MCPToolAllowedTools"}]},"authorization":{"type":["string","null"],"description":"An OAuth access token that can be used with a remote MCP server, either with a custom MCP\nserver URL or a service connector. Your application must handle the OAuth authorization\nflow and provide the token here."},"connector_id":{"oneOf":[{"type":"null"},{"description":"Identifier for service connectors, like those available in ChatGPT. One of `server_url` or\n`connector_id` must be provided. Learn more about service connectors [here](https://platform.openai.com/docs/guides/tools-remote-mcp#connectors).\n\nCurrently supported `connector_id` values are:\n- Dropbox: `connector_dropbox`\n- Gmail: `connector_gmail`\n- Google Calendar: `connector_googlecalendar`\n- Google Drive: `connector_googledrive`\n- Microsoft Teams: `connector_microsoftteams`\n- Outlook Calendar: `connector_outlookcalendar`\n- Outlook Email: `connector_outlookemail`\n- SharePoint: `connector_sharepoint`","type":"string","enum":["connector_dropbox","connector_gmail","connector_googlecalendar","connector_googledrive","connector_microsoftteams","connector_outlookcalendar","connector_outlookemail","connector_sharepoint"],"title":"McpToolConnectorId"}]},"defer_loading":{"type":["boolean","null"],"description":"Whether this MCP tool is deferred and discovered via tool search."},"headers":{"description":"Optional HTTP headers to send to the MCP server. Use for authentication or other purposes."},"require_approval":{"oneOf":[{"type":"null"},{"description":"Specify which of the MCP server's tools require approval.","oneOf":[{"description":"Specify which of the MCP server's tools require approval. Can be\n`always`, `never`, or a filter object associated with tools\nthat require approval.","type":"object","properties":{"always":{"oneOf":[{"type":"null"},{"description":"A list of tools that always require approval.","type":"object","properties":{"read_only":{"type":["boolean","null"],"description":"Indicates whether or not a tool modifies data or is read-only.\nIf an MCP server is annotated with [readOnlyHint](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\nit will match this filter."},"tool_names":{"type":["array","null"],"items":{"type":"string"},"description":"List of allowed tool names."}},"title":"MCPToolFilter"}]},"never":{"oneOf":[{"type":"null"},{"description":"A list of tools that never require approval.","type":"object","properties":{"read_only":{"type":["boolean","null"],"description":"Indicates whether or not a tool modifies data or is read-only.\nIf an MCP server is annotated with [readOnlyHint](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\nit will match this filter."},"tool_names":{"type":["array","null"],"items":{"type":"string"},"description":"List of allowed tool names."}},"title":"MCPToolFilter"}]}},"title":"MCPToolApprovalFilter"},{"description":"Specify a single approval policy for all tools. One of `always` or\n`never`. When set to `always`, all tools will require approval. When\nset to `never`, all tools will not require approval.","type":"string","enum":["always","never"],"title":"MCPToolApprovalSetting"}],"title":"MCPToolRequireApproval"}]},"server_description":{"type":["string","null"],"description":"Optional description of the MCP server, used to provide more context."},"server_label":{"type":"string","description":"A label for this MCP server, used to identify it in tool calls."},"server_url":{"type":["string","null"],"description":"The URL for the MCP server. One of `server_url` or `connector_id` must be provided."}},"title":"MCPTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp"]}}}],"description":"Give the model access to additional tools via remote Model Context Protocol\n(MCP) servers. [Learn more about MCP](https://platform.openai.com/docs/guides/tools-remote-mcp)."},{"allOf":[{"description":"A tool that runs Python code to help generate a response to a prompt.","type":"object","required":["container"],"properties":{"container":{"description":"The code interpreter container. Can be a container ID or an object that\nspecifies uploaded file IDs to make available to your code, along with an\noptional `memory_limit` setting.","oneOf":[{"allOf":[{"description":"Configuration for a code interpreter container. Optionally specify the IDs of the\nfiles to run the code on.","type":"object","properties":{"file_ids":{"type":["array","null"],"items":{"type":"string"},"description":"An optional list of uploaded files to make available to your code."},"memory_limit":{"type":["integer","null"],"format":"int64","minimum":0}},"title":"CodeInterpreterContainerAuto"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["auto"]}}}],"description":"Configuration for a code interpreter container. Optionally specify the IDs of the\nfiles to run the code on."},{"type":"object","description":"The container ID.","required":["type"],"properties":{"type":{"type":"string","enum":["container_i_d"]}}}],"title":"CodeInterpreterToolContainer"}},"title":"CodeInterpreterTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["code_interpreter"]}}}],"description":"A tool that runs Python code to help generate a response to a prompt."},{"allOf":[{"description":"A tool that generates images using a model like `gpt-image-1`.","type":"object","properties":{"action":{"oneOf":[{"type":"null"},{"description":"Whether to generate a new image or edit an existing image. Default: `auto`.","type":"string","enum":["generate","edit","auto"],"title":"ImageGenActionEnum"}]},"background":{"oneOf":[{"type":"null"},{"description":"Background type for the generated image. One of `transparent`,\n`opaque`, or `auto`. Default: `auto`.","type":"string","enum":["transparent","opaque","auto"],"title":"ImageGenToolBackground"}]},"input_fidelity":{"oneOf":[{"type":"null"},{"description":"Control how much effort the model will exert to match the style and features, especially facial features,\nof input images. This parameter is only supported for `gpt-image-1`. Unsupported\nfor `gpt-image-1-mini`. Supports `high` and `low`. Defaults to `low`.","type":"string","enum":["high","low"],"title":"InputFidelity"}]},"input_image_mask":{"oneOf":[{"type":"null"},{"description":"Optional mask for inpainting. Contains `image_url`\n(string, optional) and `file_id` (string, optional).","type":"object","properties":{"file_id":{"type":["string","null"],"description":"File ID for the mask image."},"image_url":{"type":["string","null"],"description":"Base64-encoded mask image."}},"title":"ImageGenToolInputImageMask"}]},"model":{"type":["string","null"],"description":"The image generation model to use. Default: `gpt-image-1`."},"moderation":{"oneOf":[{"type":"null"},{"description":"Moderation level for the generated image. Default: `auto`.","type":"string","enum":["auto","low"],"title":"ImageGenToolModeration"}]},"output_compression":{"type":["integer","null"],"format":"int32","description":"Compression level for the output image. Default: 100.","minimum":0},"output_format":{"oneOf":[{"type":"null"},{"description":"The output format of the generated image. One of `png`, `webp`, or\n`jpeg`. Default: `png`.","type":"string","enum":["png","webp","jpeg"],"title":"ImageGenToolOutputFormat"}]},"partial_images":{"type":["integer","null"],"format":"int32","description":"Number of partial images to generate in streaming mode, from 0 (default value) to 3.","minimum":0},"quality":{"oneOf":[{"type":"null"},{"description":"The quality of the generated image. One of `low`, `medium`, `high`,\nor `auto`. Default: `auto`.","type":"string","enum":["low","medium","high","auto"],"title":"ImageGenToolQuality"}]},"size":{"oneOf":[{"type":"null"},{"description":"The size of the generated images. For `gpt-image-2` and\n`gpt-image-2-2026-04-21`, arbitrary resolutions are supported as\n`WIDTHxHEIGHT` strings, for example `1536x864`. Width and height\nmust both be divisible by 16 and the requested aspect ratio must be\nbetween 1:3 and 3:1. Resolutions above `2560x1440` are experimental,\nand the maximum supported resolution is `3840x2160`. The requested\nsize must also satisfy the model's current pixel and edge limits.\nThe standard sizes `1024x1024`, `1536x1024`, and `1024x1536` are\nsupported by the GPT image models; `auto` is supported for models\nthat allow automatic sizing. For `dall-e-2`, use one of `256x256`,\n`512x512`, or `1024x1024`. For `dall-e-3`, use one of `1024x1024`,\n`1792x1024`, or `1024x1792`.","oneOf":[{"type":"string","enum":["auto"]},{"type":"string","enum":["1024x1024"]},{"type":"string","enum":["1024x1536"]},{"type":"string","enum":["1536x1024"]},{"type":"object","required":["other"],"properties":{"other":{"type":"string"}}}],"title":"ImageGenToolSize"}]}},"title":"ImageGenTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["image_generation"]}}}],"description":"A tool that generates images using a model like `gpt-image-1`."},{"type":"object","description":"A tool that allows the model to execute shell commands in a local environment.","required":["type"],"properties":{"type":{"type":"string","enum":["local_shell"]}}},{"allOf":[{"description":"A tool that allows the model to execute shell commands.","type":"object","properties":{"environment":{"oneOf":[{"type":"null"},{"description":"The execution environment for the shell tool.","oneOf":[{"allOf":[{"description":"Automatically creates a container for this request.","type":"object","properties":{"file_ids":{"type":["array","null"],"items":{"type":"string"},"description":"An optional list of uploaded file IDs to make available in the container."},"network_policy":{"oneOf":[{"type":"null"},{"description":"Network access policy for the container.","oneOf":[{"type":"object","description":"Disable all outbound network access.","required":["type"],"properties":{"type":{"type":"string","enum":["disabled"]}}},{"allOf":[{"description":"Allow access only to specified domains.","type":"object","required":["allowed_domains"],"properties":{"allowed_domains":{"type":"array","items":{"type":"string"},"description":"A list of allowed domains."},"domain_secrets":{"type":["array","null"],"items":{"type":"object","description":"A domain-scoped secret injected for allowlisted domains.","required":["domain","name","value"],"properties":{"domain":{"type":"string","description":"The domain associated with the secret."},"name":{"type":"string","description":"The name of the secret to inject for the domain."},"value":{"type":"string","description":"The secret value to inject for the domain."}},"title":"ContainerNetworkPolicyDomainSecretParam"},"description":"Optional domain-scoped secrets for allowlisted domains."}},"title":"ContainerNetworkPolicyAllowlistDetails"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["allowlist"]}}}],"description":"Allow access only to specified domains."}],"title":"ContainerNetworkPolicy"}]},"skills":{"type":["array","null"],"items":{"oneOf":[{"allOf":[{"description":"Reference a skill by ID.","type":"object","required":["skill_id"],"properties":{"skill_id":{"type":"string","description":"The ID of the skill to reference."},"version":{"type":["string","null"],"description":"An optional specific version to use."}},"title":"SkillReferenceParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["skill_reference"]}}}],"description":"Reference a skill by ID."},{"allOf":[{"description":"Provide an inline skill definition.","type":"object","required":["name","description","source"],"properties":{"description":{"type":"string","description":"The description of the skill."},"name":{"type":"string","description":"The name of the skill."},"source":{"description":"The inline source for the skill.","type":"object","required":["media_type","data"],"properties":{"data":{"type":"string","description":"The base64-encoded skill data."},"media_type":{"type":"string","description":"The media type. Always `\"application/zip\"`."}},"title":"InlineSkillSourceParam"}},"title":"InlineSkillParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["inline"]}}}],"description":"Provide an inline skill definition."}],"description":"A skill parameter — either a reference or inline definition.","title":"SkillParam"},"description":"An optional list of skills to make available in the container."}},"title":"ContainerAutoParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["container_auto"]}}}],"description":"Automatically creates a container for this request."},{"allOf":[{"description":"Use a local computer environment.","type":"object","properties":{"skills":{"type":["array","null"],"items":{"type":"object","description":"A local skill available in a local environment.","required":["name","description","path"],"properties":{"description":{"type":"string","description":"The description of the skill."},"name":{"type":"string","description":"The name of the skill."},"path":{"type":"string","description":"The path to the directory containing the skill."}},"title":"LocalSkillParam"},"description":"An optional list of local skills."}},"title":"LocalEnvironmentParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["local"]}}}],"description":"Use a local computer environment."},{"allOf":[{"description":"Reference an existing container by ID.","type":"object","required":["container_id"],"properties":{"container_id":{"type":"string","description":"The ID of the referenced container."}},"title":"ContainerReferenceParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["container_reference"]}}}],"description":"Reference an existing container by ID."}],"title":"FunctionShellEnvironment"}]}},"title":"FunctionShellToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["shell"]}}}],"description":"A tool that allows the model to execute shell commands."},{"allOf":[{"description":"A custom tool that processes input using a specified format. Learn more about [custom\ntools](https://platform.openai.com/docs/guides/function-calling#custom-tools)","type":"object","required":["name","format"],"properties":{"defer_loading":{"type":["boolean","null"],"description":"Whether this tool should be deferred and discovered via tool search."},"description":{"type":["string","null"],"description":"Optional description of the custom tool, used to provide more context."},"format":{"description":"The input format for the custom tool. Default is unconstrained text.","oneOf":[{"type":"object","description":"Unconstrained free-form text.","required":["type"],"properties":{"type":{"type":"string","enum":["text"]}}},{"allOf":[{"description":"A grammar defined by the user.","type":"object","required":["definition","syntax"],"properties":{"definition":{"type":"string","description":"The grammar definition."},"syntax":{"description":"The syntax of the grammar definition. One of `lark` or `regex`.","type":"string","enum":["lark","regex"],"title":"GrammarSyntax"}},"title":"CustomGrammarFormatParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["grammar"]}}}],"description":"A grammar defined by the user."}],"title":"CustomToolParamFormat"},"name":{"type":"string","description":"The name of the custom tool, used to identify it in tool calls."}},"title":"CustomToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom"]}}}],"description":"A custom tool that processes input using a specified format. Learn more about [custom\ntools](https://platform.openai.com/docs/guides/function-calling#custom-tools)"},{"allOf":[{"description":"A tool that controls a virtual computer. Learn more about the\n[computer tool](https://platform.openai.com/docs/guides/tools-computer-use).","type":"object","title":"ComputerTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer"]}}}],"description":"A tool that controls a virtual computer. Learn more about the\n[computer tool](https://platform.openai.com/docs/guides/tools-computer-use)."},{"allOf":[{"description":"Groups function/custom tools under a shared namespace.","type":"object","required":["name","description","tools"],"properties":{"description":{"type":"string","description":"A description of the namespace shown to the model."},"name":{"type":"string","description":"The namespace name used in tool calls (for example, `crm`)."},"tools":{"type":"array","items":{"oneOf":[{"allOf":[{"type":"object","description":"A function tool that can be used within a namespace or with tool search.","required":["name"],"properties":{"defer_loading":{"type":["boolean","null"],"description":"Whether this function should be deferred and discovered via tool search."},"description":{"type":["string","null"],"description":"A description of the function."},"name":{"type":"string","description":"The name of the function."},"parameters":{"description":"A JSON schema object describing the parameters of the function."},"strict":{"type":["boolean","null"],"description":"Whether to enforce strict parameter validation."}},"title":"FunctionToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function"]}}}]},{"allOf":[{"type":"object","required":["name","format"],"properties":{"defer_loading":{"type":["boolean","null"],"description":"Whether this tool should be deferred and discovered via tool search."},"description":{"type":["string","null"],"description":"Optional description of the custom tool, used to provide more context."},"format":{"description":"The input format for the custom tool. Default is unconstrained text.","oneOf":[{"type":"object","description":"Unconstrained free-form text.","required":["type"],"properties":{"type":{"type":"string","enum":["text"]}}},{"allOf":[{"description":"A grammar defined by the user.","type":"object","required":["definition","syntax"],"properties":{"definition":{"type":"string","description":"The grammar definition."},"syntax":{"description":"The syntax of the grammar definition. One of `lark` or `regex`.","type":"string","enum":["lark","regex"],"title":"GrammarSyntax"}},"title":"CustomGrammarFormatParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["grammar"]}}}],"description":"A grammar defined by the user."}],"title":"CustomToolParamFormat"},"name":{"type":"string","description":"The name of the custom tool, used to identify it in tool calls."}},"title":"CustomToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom"]}}}]}],"description":"A function or custom tool that belongs to a namespace.","title":"NamespaceToolParamTool"},"description":"The function/custom tools available inside this namespace."}},"title":"NamespaceToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["namespace"]}}}],"description":"Groups function/custom tools under a shared namespace."},{"allOf":[{"description":"Hosted or BYOT tool search configuration for deferred tools.","type":"object","properties":{"description":{"type":["string","null"],"description":"Description shown to the model for a client-executed tool search tool."},"execution":{"oneOf":[{"type":"null"},{"description":"Whether tool search is executed by the server or by the client.","type":"string","enum":["server","client"],"title":"ToolSearchExecutionType"}]},"parameters":{"description":"Parameter schema for a client-executed tool search tool."}},"title":"ToolSearchToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["tool_search"]}}}],"description":"Hosted or BYOT tool search configuration for deferred tools."},{"allOf":[{"description":" This tool searches the web for relevant results to use in a response. Learn more about the [web search\ntool](https://platform.openai.com/docs/guides/tools-web-search).","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_content_types":{"type":["array","null"],"items":{"type":"string","description":"The type of content to search for.","enum":["text","image"],"title":"SearchContentType"},"description":"The types of content to search for."},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Defaults to `approximate` when omitted in JSON input.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_preview"]}}}],"description":" This tool searches the web for relevant results to use in a response. Learn more about the [web search\ntool](https://platform.openai.com/docs/guides/tools-web-search)."},{"allOf":[{"description":"type: web_search_preview_2025_03_11","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_content_types":{"type":["array","null"],"items":{"type":"string","description":"The type of content to search for.","enum":["text","image"],"title":"SearchContentType"},"description":"The types of content to search for."},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Defaults to `approximate` when omitted in JSON input.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_preview_2025_03_11"]}}}],"description":"type: web_search_preview_2025_03_11"},{"type":"object","description":"Allows the assistant to create, delete, or update files using unified diffs.","required":["type"],"properties":{"type":{"type":"string","enum":["apply_patch"]}}}],"description":"Definitions for model-callable tools.","title":"Tool"},"description":"The loaded tool definitions returned by tool search."}},"title":"ToolSearchOutput"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["tool_search_output"]}}}],"description":"A tool search output."}],"description":"Output item","title":"OutputItem"},"description":"An array of content items generated by the model.\n\n- The length and order of items in the output array is dependent on the model's response.\n- Rather than accessing the first item in the output array and assuming it's an assistant\n message with the content generated by the model, you might consider using\n the `output_text` property where supported in SDKs."},"parallel_tool_calls":{"type":["boolean","null"],"description":"SDK-only convenience property that contains the aggregated text output from all\n`output_text` items in the `output` array, if any are present.\nSupported in the Python and JavaScript SDKs.\nWhether to allow the model to run tool calls in parallel."},"previous_response_id":{"type":["string","null"],"description":"The unique ID of the previous response to the model. Use this to create multi-turn conversations.\nLearn more about [conversation state](https://platform.openai.com/docs/guides/conversation-state).\nCannot be used in conjunction with `conversation`."},"prompt":{"oneOf":[{"type":"null"},{"description":"Reference to a prompt template and its variables.\n[Learn more](https://platform.openai.com/docs/guides/text?api-mode=responses#reusable-prompts).","type":"object","required":["id"],"properties":{"id":{"type":"string","description":"The unique identifier of the prompt template to use."},"variables":{"oneOf":[{"type":"null"},{"description":"Optional map of values to substitute in for variables in your\nprompt. The substitution values can either be strings, or other\nResponse input types like images or files.","oneOf":[{"type":"string"},{"oneOf":[{"allOf":[{"description":"A text input to the model.","type":"object","required":["text"],"properties":{"text":{"type":"string","description":"The text input to the model."}},"title":"InputTextContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_text"]}}}],"description":"A text input to the model."},{"allOf":[{"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision).","type":"object","properties":{"detail":{"description":"The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`.\nDefaults to `auto` when omitted in JSON input.","type":"string","enum":["auto","low","high","original"],"title":"ImageDetail"},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"image_url":{"type":["string","null"],"description":"The URL of the image to be sent to the model. A fully qualified URL or base64 encoded image\nin a data URL."}},"title":"InputImageContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_image"]}}}],"description":"An image input to the model. Learn about\n[image inputs](https://platform.openai.com/docs/guides/vision)."},{"allOf":[{"description":"A file input to the model.","type":"object","properties":{"detail":{"oneOf":[{"type":"null"},{"description":"The detail level of the file to be sent to the model. Use `low` for the default rendering\nbehavior, or `high` to render the file at higher quality. Defaults to `low`.","type":"string","enum":["low","high"],"title":"FileInputDetail"}]},"file_data":{"type":["string","null"],"description":"The content of the file to be sent to the model."},"file_id":{"type":["string","null"],"description":"The ID of the file to be sent to the model."},"file_url":{"type":["string","null"],"description":"The URL of the file to be sent to the model."},"filename":{"type":["string","null"],"description":"The name of the file to be sent to the model."}},"title":"InputFileContent"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["input_file"]}}}],"description":"A file input to the model."}],"description":"Parts of a message: text, image, file, or audio.","title":"InputContent"},{}],"title":"ResponsePromptVariables"}]},"version":{"type":["string","null"],"description":"Optional version of the prompt template."}},"title":"Prompt"}]},"prompt_cache_key":{"type":["string","null"],"description":"Used by OpenAI to cache responses for similar requests to optimize your cache hit rates. Replaces\nthe `user` field. [Learn more](https://platform.openai.com/docs/guides/prompt-caching)."},"prompt_cache_retention":{"oneOf":[{"type":"null"},{"description":"The retention policy for the prompt cache. Set to `24h` to enable extended prompt caching,\nwhich keeps cached prefixes active for longer, up to a maximum of 24 hours. [Learn\nmore](https://platform.openai.com/docs/guides/prompt-caching#prompt-cache-retention).","type":"string","enum":["in-memory","24h"],"title":"PromptCacheRetention"}]},"reasoning":{"oneOf":[{"type":"null"},{"description":"**gpt-5 and o-series models only**\nConfiguration options for [reasoning models](https://platform.openai.com/docs/guides/reasoning).","type":"object","properties":{"effort":{"oneOf":[{"type":"null"},{"description":"Constrains effort on reasoning for\n[reasoning models](https://platform.openai.com/docs/guides/reasoning).\nCurrently supported values are `minimal`, `low`, `medium`, and `high`. Reducing\nreasoning effort can result in faster responses and fewer tokens used\non reasoning in a response.\n\nNote: The `gpt-5-pro` model defaults to (and only supports) `high` reasoning effort.","type":"string","enum":["none","minimal","low","medium","high","xhigh"],"title":"ReasoningEffort"}]},"summary":{"oneOf":[{"type":"null"},{"description":"A summary of the reasoning performed by the model. This can be\nuseful for debugging and understanding the model's reasoning process.\nOne of `auto`, `concise`, or `detailed`.\n\n`concise` is supported for `computer-use-preview` models and all reasoning models after\n`gpt-5`.","type":"string","enum":["auto","concise","detailed"],"title":"ReasoningSummary"}]}},"title":"Reasoning"}]},"safety_identifier":{"type":["string","null"],"description":"A stable identifier used to help detect users of your application that may be violating OpenAI's\nusage policies.\n\nThe IDs should be a string that uniquely identifies each user. We recommend hashing their username\nor email address, in order to avoid sending us any identifying information. [Learn\nmore](https://platform.openai.com/docs/guides/safety-best-practices#safety-identifiers)."},"service_tier":{"oneOf":[{"type":"null"},{"description":"Specifies the processing type used for serving the request.\n- If set to 'auto', then the request will be processed with the service tier configured in the Project settings. Unless otherwise configured, the Project will use 'default'.\n- If set to 'default', then the request will be processed with the standard pricing and performance for the selected model.\n- If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or '[priority](https://openai.com/api-priority-processing/)', then the request will be processed with the corresponding service tier.\n- When not set, the default behavior is 'auto'.\n\nWhen the `service_tier` parameter is set, the response body will include the `service_tier` value based on the processing mode actually used to serve the request. This response value may be different from the value set in the parameter.","anyOf":[{"type":"string","enum":["auto","default","flex","scale","priority"]},{"type":"string"}],"title":"ServiceTierResponse"}]},"status":{"description":"The status of the response generation.\nOne of `completed`, `failed`, `in_progress`, `cancelled`, `queued`, or `incomplete`.","type":"string","enum":["completed","failed","in_progress","cancelled","queued","incomplete"],"title":"Status"},"temperature":{"type":["number","null"],"format":"float","description":"What sampling temperature was used, between 0 and 2. Higher values like 0.8 make\noutputs more random, lower values like 0.2 make output more focused and deterministic.\n\nWe generally recommend altering this or `top_p` but not both."},"text":{"oneOf":[{"type":"null"},{"description":"Configuration options for a text response from the model. Can be plain\ntext or structured JSON data. Learn more:\n- [Text inputs and outputs](https://platform.openai.com/docs/guides/text)\n- [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)","type":"object","properties":{"format":{"description":"An object specifying the format that the model must output.\n\nConfiguring `{ \"type\": \"json_schema\" }` enables Structured Outputs,\nwhich ensures the model will match your supplied JSON schema. Learn more in the\n[Structured Outputs guide](https://platform.openai.com/docs/guides/structured-outputs).\n\nThe default format is `{ \"type\": \"text\" }` with no additional options.\n\n**Not recommended for gpt-4o and newer models:**\n\nSetting to `{ \"type\": \"json_object\" }` enables the older JSON mode, which\nensures the message the model generates is valid JSON. Using `json_schema`\nis preferred for models that support it.","oneOf":[{"type":"object","description":"Default response format. Used to generate text responses.","required":["type"],"properties":{"type":{"type":"string","enum":["text"]}}},{"type":"object","description":"JSON object response format. An older method of generating JSON responses.\nUsing `json_schema` is recommended for models that support it.\nNote that the model will not generate JSON without a system or user message\ninstructing it to do so.","required":["type"],"properties":{"type":{"type":"string","enum":["json_object"]}}},{"allOf":[{"description":"JSON Schema response format. Used to generate structured JSON responses.\nLearn more about [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs).","type":"object","required":["name","schema"],"properties":{"description":{"type":["string","null"],"description":"A description of what the response format is for, used by the model to determine how to respond in the format."},"name":{"type":"string","description":"The name of the response format. Must be a-z, A-Z, 0-9, or contain underscores and dashes, with a maximum length of 64."},"schema":{"description":"The schema for the response format, described as a JSON Schema object.\nLearn how to build JSON schemas [here](https://json-schema.org/)."},"strict":{"type":["boolean","null"],"description":"Whether to enable strict schema adherence when generating the output.\nIf set to true, the model will always follow the exact schema defined\nin the `schema` field. Only a subset of JSON Schema is supported when\n`strict` is `true`. To learn more, read the [Structured Outputs\nguide](https://platform.openai.com/docs/guides/structured-outputs)."}},"title":"ResponseFormatJsonSchema"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["json_schema"]}}}],"description":"JSON Schema response format. Used to generate structured JSON responses.\nLearn more about [Structured Outputs](https://platform.openai.com/docs/guides/structured-outputs)."}],"title":"TextResponseFormatConfiguration"},"verbosity":{"oneOf":[{"type":"null"},{"description":"Constrains the verbosity of the model's response. Lower values will result in\nmore concise responses, while higher values will result in more verbose responses.\n\nCurrently supported values are `low`, `medium`, and `high`.","type":"string","enum":["low","medium","high"],"title":"Verbosity"}]}},"title":"ResponseTextParam"}]},"tool_choice":{"oneOf":[{"type":"null"},{"description":"How the model should select which tool (or tools) to use when generating\na response. See the `tools` parameter to see how to specify which tools\nthe model can call.","oneOf":[{"allOf":[{"description":"Constrains the tools available to the model to a pre-defined set.","type":"object","required":["mode","tools"],"properties":{"mode":{"description":"Constrains the tools available to the model to a pre-defined set.\n\n`auto` allows the model to pick from among the allowed tools and generate a\nmessage.\n\n`required` requires the model to call one or more of the allowed tools.","type":"string","enum":["auto","required"],"title":"ToolChoiceAllowedMode"},"tools":{"type":"array","items":{},"description":"A list of tool definitions that the model should be allowed to call.\n\nFor the Responses API, the list of tool definitions might look like:\n```json\n[\n { \"type\": \"function\", \"name\": \"get_weather\" },\n { \"type\": \"mcp\", \"server_label\": \"deepwiki\" },\n { \"type\": \"image_generation\" }\n]\n```"}},"title":"ToolChoiceAllowed"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["allowed_tools"]}}}],"description":"Constrains the tools available to the model to a pre-defined set."},{"allOf":[{"description":"Use this option to force the model to call a specific function.","type":"object","required":["name"],"properties":{"name":{"type":"string","description":"The name of the function to call."}},"title":"ToolChoiceFunction"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function"]}}}],"description":"Use this option to force the model to call a specific function."},{"allOf":[{"description":"Use this option to force the model to call a specific tool on a remote MCP server.","type":"object","required":["name","server_label"],"properties":{"name":{"type":"string","description":"The name of the tool to call on the server."},"server_label":{"type":"string","description":"The label of the MCP server to use."}},"title":"ToolChoiceMCP"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp"]}}}],"description":"Use this option to force the model to call a specific tool on a remote MCP server."},{"allOf":[{"description":"Use this option to force the model to call a custom tool.","type":"object","required":["name"],"properties":{"name":{"type":"string","description":"The name of the custom tool to call."}},"title":"ToolChoiceCustom"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom"]}}}],"description":"Use this option to force the model to call a custom tool."},{"type":"object","description":"Forces the model to call the apply_patch tool when executing a tool call.","required":["type"],"properties":{"type":{"type":"string","enum":["apply_patch"]}}},{"type":"object","description":"Forces the model to call the function shell tool when a tool call is required.","required":["type"],"properties":{"type":{"type":"string","enum":["shell"]}}},{"allOf":[{"description":"Indicates that the model should use a built-in tool to generate a response.\n[Learn more about built-in tools](https://platform.openai.com/docs/guides/tools).","oneOf":[{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_search"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_preview"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer_use_preview"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer_use"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_preview_2025_03_11"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["code_interpreter"]}}},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["image_generation"]}}}],"title":"ToolChoiceTypes"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["hosted"]}}}],"description":"Indicates that the model should use a built-in tool to generate a response.\n[Learn more about built-in tools](https://platform.openai.com/docs/guides/tools)."},{"allOf":[{"description":"Controls which (if any) tool is called by the model.\n\n`none` means the model will not call any tool and instead generates a message.\n\n`auto` means the model can pick between generating a message or calling one or\nmore tools.\n\n`required` means the model must call one or more tools.","type":"string","enum":["none","auto","required"],"title":"ToolChoiceOptions"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mode"]}}}],"description":"Controls which (if any) tool is called by the model.\n\n`none` means the model will not call any tool and instead generates a message.\n\n`auto` means the model can pick between generating a message or calling one or\nmore tools.\n\n`required` means the model must call one or more tools."}],"title":"ToolChoiceParam"}]},"tools":{"type":["array","null"],"items":{"oneOf":[{"allOf":[{"description":"Defines a function in your own code the model can choose to call. Learn more about [function\ncalling](https://platform.openai.com/docs/guides/tools).","type":"object","required":["name"],"properties":{"defer_loading":{"type":["boolean","null"],"description":"Whether this function is deferred and loaded via tool search."},"description":{"type":["string","null"],"description":"A description of the function. Used by the model to determine whether or not to call the\nfunction."},"name":{"type":"string","description":"The name of the function to call."},"parameters":{"description":"A JSON schema object describing the parameters of the function."},"strict":{"type":["boolean","null"],"description":"Whether to enforce strict parameter validation. Default `true`."}},"title":"FunctionTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function"]}}}],"description":"Defines a function in your own code the model can choose to call. Learn more about [function\ncalling](https://platform.openai.com/docs/guides/tools)."},{"allOf":[{"description":"A tool that searches for relevant content from uploaded files. Learn more about the [file search\ntool](https://platform.openai.com/docs/guides/tools-file-search).","type":"object","required":["vector_store_ids"],"properties":{"filters":{"oneOf":[{"type":"null"},{"description":"A filter to apply.","oneOf":[{"description":"A filter used to compare a specified attribute key to a given value using a defined\ncomparison operation.","type":"object","required":["type","key","value"],"properties":{"key":{"type":"string","description":"The key to compare against the value."},"type":{"description":"Specifies the comparison operator: `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `in`, `nin`.\n- `eq`: equals\n- `ne`: not equal\n- `gt`: greater than\n- `gte`: greater than or equal\n- `lt`: less than\n- `lte`: less than or equal\n- `in`: in\n- `nin`: not in","type":"string","enum":["eq","ne","gt","gte","lt","lte","in","nin"],"title":"ComparisonType"},"value":{"description":"The value to compare against the attribute key; supports string, number, or boolean types."}},"title":"ComparisonFilter"},{"description":"Combine multiple filters using `and` or `or`.","type":"object","required":["type","filters"],"properties":{"filters":{"type":"array","items":{"oneOf":"circular()","description":"Filters for file search.","title":"Filter"},"description":"Array of filters to combine. Items can be ComparisonFilter or CompoundFilter."},"type":{"type":"string","enum":["and","or"],"description":"'Type of operation: `and` or `or`.'"}},"title":"CompoundFilter"}],"title":"Filter"}]},"max_num_results":{"type":["integer","null"],"format":"int32","description":"The maximum number of results to return. This number should be between 1 and 50 inclusive.","minimum":0},"ranking_options":{"oneOf":[{"type":"null"},{"description":"Ranking options for search.","type":"object","required":["ranker"],"properties":{"hybrid_search":{"oneOf":[{"type":"null"},{"description":"Weights that control how reciprocal rank fusion balances semantic embedding matches versus\nsparse keyword matches when hybrid search is enabled.","type":"object","required":["embedding_weight","text_weight"],"properties":{"embedding_weight":{"type":"number","format":"float","description":"The weight of the embedding in the reciprocal ranking fusion."},"text_weight":{"type":"number","format":"float","description":"The weight of the text in the reciprocal ranking fusion."}},"title":"HybridSearch"}]},"ranker":{"description":"The ranker to use for the file search.","type":"string","enum":["auto","default-2024-11-15"],"title":"RankVersionType"},"score_threshold":{"type":["number","null"],"format":"float","description":"The score threshold for the file search, a number between 0 and 1. Numbers closer to 1 will\nattempt to return only the most relevant results, but may return fewer results."}},"title":"RankingOptions"}]},"vector_store_ids":{"type":"array","items":{"type":"string"},"description":"The IDs of the vector stores to search."}},"title":"FileSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["file_search"]}}}],"description":"A tool that searches for relevant content from uploaded files. Learn more about the [file search\ntool](https://platform.openai.com/docs/guides/tools-file-search)."},{"allOf":[{"description":"A tool that controls a virtual computer. Learn more about the [computer\nuse tool](https://platform.openai.com/docs/guides/tools-computer-use).","type":"object","required":["environment","display_width","display_height"],"properties":{"display_height":{"type":"integer","format":"int32","description":"The height of the computer display.","minimum":0},"display_width":{"type":"integer","format":"int32","description":"The width of the computer display.","minimum":0},"environment":{"description":"The type of computer environment to control.","type":"string","enum":["windows","mac","linux","ubuntu","browser"],"title":"ComputerEnvironment"}},"title":"ComputerUsePreviewTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer_use_preview"]}}}],"description":"A tool that controls a virtual computer. Learn more about the [computer\nuse tool](https://platform.openai.com/docs/guides/tools-computer-use)."},{"allOf":[{"description":"Search the Internet for sources related to the prompt. Learn more about the\n[web search tool](https://platform.openai.com/docs/guides/tools-web-search).","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_content_types":{"type":["array","null"],"items":{"type":"string","description":"The type of content to search for.","enum":["text","image"],"title":"SearchContentType"},"description":"The types of content to search for."},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Defaults to `approximate` when omitted in JSON input.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search"]}}}],"description":"Search the Internet for sources related to the prompt. Learn more about the\n[web search tool](https://platform.openai.com/docs/guides/tools-web-search)."},{"allOf":[{"description":"type: web_search_2025_08_26","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_content_types":{"type":["array","null"],"items":{"type":"string","description":"The type of content to search for.","enum":["text","image"],"title":"SearchContentType"},"description":"The types of content to search for."},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Defaults to `approximate` when omitted in JSON input.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_2025_08_26"]}}}],"description":"type: web_search_2025_08_26"},{"allOf":[{"description":"Give the model access to additional tools via remote Model Context Protocol\n(MCP) servers. [Learn more about MCP](https://platform.openai.com/docs/guides/tools-remote-mcp).","type":"object","required":["server_label"],"properties":{"allowed_tools":{"oneOf":[{"type":"null"},{"description":"List of allowed tool names or a filter object.","oneOf":[{"type":"array","items":{"type":"string"},"description":"A string array of allowed tool names"},{"description":"A filter object to specify which tools are allowed.","type":"object","properties":{"read_only":{"type":["boolean","null"],"description":"Indicates whether or not a tool modifies data or is read-only.\nIf an MCP server is annotated with [readOnlyHint](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\nit will match this filter."},"tool_names":{"type":["array","null"],"items":{"type":"string"},"description":"List of allowed tool names."}},"title":"MCPToolFilter"}],"title":"MCPToolAllowedTools"}]},"authorization":{"type":["string","null"],"description":"An OAuth access token that can be used with a remote MCP server, either with a custom MCP\nserver URL or a service connector. Your application must handle the OAuth authorization\nflow and provide the token here."},"connector_id":{"oneOf":[{"type":"null"},{"description":"Identifier for service connectors, like those available in ChatGPT. One of `server_url` or\n`connector_id` must be provided. Learn more about service connectors [here](https://platform.openai.com/docs/guides/tools-remote-mcp#connectors).\n\nCurrently supported `connector_id` values are:\n- Dropbox: `connector_dropbox`\n- Gmail: `connector_gmail`\n- Google Calendar: `connector_googlecalendar`\n- Google Drive: `connector_googledrive`\n- Microsoft Teams: `connector_microsoftteams`\n- Outlook Calendar: `connector_outlookcalendar`\n- Outlook Email: `connector_outlookemail`\n- SharePoint: `connector_sharepoint`","type":"string","enum":["connector_dropbox","connector_gmail","connector_googlecalendar","connector_googledrive","connector_microsoftteams","connector_outlookcalendar","connector_outlookemail","connector_sharepoint"],"title":"McpToolConnectorId"}]},"defer_loading":{"type":["boolean","null"],"description":"Whether this MCP tool is deferred and discovered via tool search."},"headers":{"description":"Optional HTTP headers to send to the MCP server. Use for authentication or other purposes."},"require_approval":{"oneOf":[{"type":"null"},{"description":"Specify which of the MCP server's tools require approval.","oneOf":[{"description":"Specify which of the MCP server's tools require approval. Can be\n`always`, `never`, or a filter object associated with tools\nthat require approval.","type":"object","properties":{"always":{"oneOf":[{"type":"null"},{"description":"A list of tools that always require approval.","type":"object","properties":{"read_only":{"type":["boolean","null"],"description":"Indicates whether or not a tool modifies data or is read-only.\nIf an MCP server is annotated with [readOnlyHint](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\nit will match this filter."},"tool_names":{"type":["array","null"],"items":{"type":"string"},"description":"List of allowed tool names."}},"title":"MCPToolFilter"}]},"never":{"oneOf":[{"type":"null"},{"description":"A list of tools that never require approval.","type":"object","properties":{"read_only":{"type":["boolean","null"],"description":"Indicates whether or not a tool modifies data or is read-only.\nIf an MCP server is annotated with [readOnlyHint](https://modelcontextprotocol.io/specification/2025-06-18/schema#toolannotations-readonlyhint),\nit will match this filter."},"tool_names":{"type":["array","null"],"items":{"type":"string"},"description":"List of allowed tool names."}},"title":"MCPToolFilter"}]}},"title":"MCPToolApprovalFilter"},{"description":"Specify a single approval policy for all tools. One of `always` or\n`never`. When set to `always`, all tools will require approval. When\nset to `never`, all tools will not require approval.","type":"string","enum":["always","never"],"title":"MCPToolApprovalSetting"}],"title":"MCPToolRequireApproval"}]},"server_description":{"type":["string","null"],"description":"Optional description of the MCP server, used to provide more context."},"server_label":{"type":"string","description":"A label for this MCP server, used to identify it in tool calls."},"server_url":{"type":["string","null"],"description":"The URL for the MCP server. One of `server_url` or `connector_id` must be provided."}},"title":"MCPTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["mcp"]}}}],"description":"Give the model access to additional tools via remote Model Context Protocol\n(MCP) servers. [Learn more about MCP](https://platform.openai.com/docs/guides/tools-remote-mcp)."},{"allOf":[{"description":"A tool that runs Python code to help generate a response to a prompt.","type":"object","required":["container"],"properties":{"container":{"description":"The code interpreter container. Can be a container ID or an object that\nspecifies uploaded file IDs to make available to your code, along with an\noptional `memory_limit` setting.","oneOf":[{"allOf":[{"description":"Configuration for a code interpreter container. Optionally specify the IDs of the\nfiles to run the code on.","type":"object","properties":{"file_ids":{"type":["array","null"],"items":{"type":"string"},"description":"An optional list of uploaded files to make available to your code."},"memory_limit":{"type":["integer","null"],"format":"int64","minimum":0}},"title":"CodeInterpreterContainerAuto"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["auto"]}}}],"description":"Configuration for a code interpreter container. Optionally specify the IDs of the\nfiles to run the code on."},{"type":"object","description":"The container ID.","required":["type"],"properties":{"type":{"type":"string","enum":["container_i_d"]}}}],"title":"CodeInterpreterToolContainer"}},"title":"CodeInterpreterTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["code_interpreter"]}}}],"description":"A tool that runs Python code to help generate a response to a prompt."},{"allOf":[{"description":"A tool that generates images using a model like `gpt-image-1`.","type":"object","properties":{"action":{"oneOf":[{"type":"null"},{"description":"Whether to generate a new image or edit an existing image. Default: `auto`.","type":"string","enum":["generate","edit","auto"],"title":"ImageGenActionEnum"}]},"background":{"oneOf":[{"type":"null"},{"description":"Background type for the generated image. One of `transparent`,\n`opaque`, or `auto`. Default: `auto`.","type":"string","enum":["transparent","opaque","auto"],"title":"ImageGenToolBackground"}]},"input_fidelity":{"oneOf":[{"type":"null"},{"description":"Control how much effort the model will exert to match the style and features, especially facial features,\nof input images. This parameter is only supported for `gpt-image-1`. Unsupported\nfor `gpt-image-1-mini`. Supports `high` and `low`. Defaults to `low`.","type":"string","enum":["high","low"],"title":"InputFidelity"}]},"input_image_mask":{"oneOf":[{"type":"null"},{"description":"Optional mask for inpainting. Contains `image_url`\n(string, optional) and `file_id` (string, optional).","type":"object","properties":{"file_id":{"type":["string","null"],"description":"File ID for the mask image."},"image_url":{"type":["string","null"],"description":"Base64-encoded mask image."}},"title":"ImageGenToolInputImageMask"}]},"model":{"type":["string","null"],"description":"The image generation model to use. Default: `gpt-image-1`."},"moderation":{"oneOf":[{"type":"null"},{"description":"Moderation level for the generated image. Default: `auto`.","type":"string","enum":["auto","low"],"title":"ImageGenToolModeration"}]},"output_compression":{"type":["integer","null"],"format":"int32","description":"Compression level for the output image. Default: 100.","minimum":0},"output_format":{"oneOf":[{"type":"null"},{"description":"The output format of the generated image. One of `png`, `webp`, or\n`jpeg`. Default: `png`.","type":"string","enum":["png","webp","jpeg"],"title":"ImageGenToolOutputFormat"}]},"partial_images":{"type":["integer","null"],"format":"int32","description":"Number of partial images to generate in streaming mode, from 0 (default value) to 3.","minimum":0},"quality":{"oneOf":[{"type":"null"},{"description":"The quality of the generated image. One of `low`, `medium`, `high`,\nor `auto`. Default: `auto`.","type":"string","enum":["low","medium","high","auto"],"title":"ImageGenToolQuality"}]},"size":{"oneOf":[{"type":"null"},{"description":"The size of the generated images. For `gpt-image-2` and\n`gpt-image-2-2026-04-21`, arbitrary resolutions are supported as\n`WIDTHxHEIGHT` strings, for example `1536x864`. Width and height\nmust both be divisible by 16 and the requested aspect ratio must be\nbetween 1:3 and 3:1. Resolutions above `2560x1440` are experimental,\nand the maximum supported resolution is `3840x2160`. The requested\nsize must also satisfy the model's current pixel and edge limits.\nThe standard sizes `1024x1024`, `1536x1024`, and `1024x1536` are\nsupported by the GPT image models; `auto` is supported for models\nthat allow automatic sizing. For `dall-e-2`, use one of `256x256`,\n`512x512`, or `1024x1024`. For `dall-e-3`, use one of `1024x1024`,\n`1792x1024`, or `1024x1792`.","oneOf":[{"type":"string","enum":["auto"]},{"type":"string","enum":["1024x1024"]},{"type":"string","enum":["1024x1536"]},{"type":"string","enum":["1536x1024"]},{"type":"object","required":["other"],"properties":{"other":{"type":"string"}}}],"title":"ImageGenToolSize"}]}},"title":"ImageGenTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["image_generation"]}}}],"description":"A tool that generates images using a model like `gpt-image-1`."},{"type":"object","description":"A tool that allows the model to execute shell commands in a local environment.","required":["type"],"properties":{"type":{"type":"string","enum":["local_shell"]}}},{"allOf":[{"description":"A tool that allows the model to execute shell commands.","type":"object","properties":{"environment":{"oneOf":[{"type":"null"},{"description":"The execution environment for the shell tool.","oneOf":[{"allOf":[{"description":"Automatically creates a container for this request.","type":"object","properties":{"file_ids":{"type":["array","null"],"items":{"type":"string"},"description":"An optional list of uploaded file IDs to make available in the container."},"network_policy":{"oneOf":[{"type":"null"},{"description":"Network access policy for the container.","oneOf":[{"type":"object","description":"Disable all outbound network access.","required":["type"],"properties":{"type":{"type":"string","enum":["disabled"]}}},{"allOf":[{"description":"Allow access only to specified domains.","type":"object","required":["allowed_domains"],"properties":{"allowed_domains":{"type":"array","items":{"type":"string"},"description":"A list of allowed domains."},"domain_secrets":{"type":["array","null"],"items":{"type":"object","description":"A domain-scoped secret injected for allowlisted domains.","required":["domain","name","value"],"properties":{"domain":{"type":"string","description":"The domain associated with the secret."},"name":{"type":"string","description":"The name of the secret to inject for the domain."},"value":{"type":"string","description":"The secret value to inject for the domain."}},"title":"ContainerNetworkPolicyDomainSecretParam"},"description":"Optional domain-scoped secrets for allowlisted domains."}},"title":"ContainerNetworkPolicyAllowlistDetails"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["allowlist"]}}}],"description":"Allow access only to specified domains."}],"title":"ContainerNetworkPolicy"}]},"skills":{"type":["array","null"],"items":{"oneOf":[{"allOf":[{"description":"Reference a skill by ID.","type":"object","required":["skill_id"],"properties":{"skill_id":{"type":"string","description":"The ID of the skill to reference."},"version":{"type":["string","null"],"description":"An optional specific version to use."}},"title":"SkillReferenceParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["skill_reference"]}}}],"description":"Reference a skill by ID."},{"allOf":[{"description":"Provide an inline skill definition.","type":"object","required":["name","description","source"],"properties":{"description":{"type":"string","description":"The description of the skill."},"name":{"type":"string","description":"The name of the skill."},"source":{"description":"The inline source for the skill.","type":"object","required":["media_type","data"],"properties":{"data":{"type":"string","description":"The base64-encoded skill data."},"media_type":{"type":"string","description":"The media type. Always `\"application/zip\"`."}},"title":"InlineSkillSourceParam"}},"title":"InlineSkillParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["inline"]}}}],"description":"Provide an inline skill definition."}],"description":"A skill parameter — either a reference or inline definition.","title":"SkillParam"},"description":"An optional list of skills to make available in the container."}},"title":"ContainerAutoParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["container_auto"]}}}],"description":"Automatically creates a container for this request."},{"allOf":[{"description":"Use a local computer environment.","type":"object","properties":{"skills":{"type":["array","null"],"items":{"type":"object","description":"A local skill available in a local environment.","required":["name","description","path"],"properties":{"description":{"type":"string","description":"The description of the skill."},"name":{"type":"string","description":"The name of the skill."},"path":{"type":"string","description":"The path to the directory containing the skill."}},"title":"LocalSkillParam"},"description":"An optional list of local skills."}},"title":"LocalEnvironmentParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["local"]}}}],"description":"Use a local computer environment."},{"allOf":[{"description":"Reference an existing container by ID.","type":"object","required":["container_id"],"properties":{"container_id":{"type":"string","description":"The ID of the referenced container."}},"title":"ContainerReferenceParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["container_reference"]}}}],"description":"Reference an existing container by ID."}],"title":"FunctionShellEnvironment"}]}},"title":"FunctionShellToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["shell"]}}}],"description":"A tool that allows the model to execute shell commands."},{"allOf":[{"description":"A custom tool that processes input using a specified format. Learn more about [custom\ntools](https://platform.openai.com/docs/guides/function-calling#custom-tools)","type":"object","required":["name","format"],"properties":{"defer_loading":{"type":["boolean","null"],"description":"Whether this tool should be deferred and discovered via tool search."},"description":{"type":["string","null"],"description":"Optional description of the custom tool, used to provide more context."},"format":{"description":"The input format for the custom tool. Default is unconstrained text.","oneOf":[{"type":"object","description":"Unconstrained free-form text.","required":["type"],"properties":{"type":{"type":"string","enum":["text"]}}},{"allOf":[{"description":"A grammar defined by the user.","type":"object","required":["definition","syntax"],"properties":{"definition":{"type":"string","description":"The grammar definition."},"syntax":{"description":"The syntax of the grammar definition. One of `lark` or `regex`.","type":"string","enum":["lark","regex"],"title":"GrammarSyntax"}},"title":"CustomGrammarFormatParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["grammar"]}}}],"description":"A grammar defined by the user."}],"title":"CustomToolParamFormat"},"name":{"type":"string","description":"The name of the custom tool, used to identify it in tool calls."}},"title":"CustomToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom"]}}}],"description":"A custom tool that processes input using a specified format. Learn more about [custom\ntools](https://platform.openai.com/docs/guides/function-calling#custom-tools)"},{"allOf":[{"description":"A tool that controls a virtual computer. Learn more about the\n[computer tool](https://platform.openai.com/docs/guides/tools-computer-use).","type":"object","title":"ComputerTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["computer"]}}}],"description":"A tool that controls a virtual computer. Learn more about the\n[computer tool](https://platform.openai.com/docs/guides/tools-computer-use)."},{"allOf":[{"description":"Groups function/custom tools under a shared namespace.","type":"object","required":["name","description","tools"],"properties":{"description":{"type":"string","description":"A description of the namespace shown to the model."},"name":{"type":"string","description":"The namespace name used in tool calls (for example, `crm`)."},"tools":{"type":"array","items":{"oneOf":[{"allOf":[{"type":"object","description":"A function tool that can be used within a namespace or with tool search.","required":["name"],"properties":{"defer_loading":{"type":["boolean","null"],"description":"Whether this function should be deferred and discovered via tool search."},"description":{"type":["string","null"],"description":"A description of the function."},"name":{"type":"string","description":"The name of the function."},"parameters":{"description":"A JSON schema object describing the parameters of the function."},"strict":{"type":["boolean","null"],"description":"Whether to enforce strict parameter validation."}},"title":"FunctionToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["function"]}}}]},{"allOf":[{"type":"object","required":["name","format"],"properties":{"defer_loading":{"type":["boolean","null"],"description":"Whether this tool should be deferred and discovered via tool search."},"description":{"type":["string","null"],"description":"Optional description of the custom tool, used to provide more context."},"format":{"description":"The input format for the custom tool. Default is unconstrained text.","oneOf":[{"type":"object","description":"Unconstrained free-form text.","required":["type"],"properties":{"type":{"type":"string","enum":["text"]}}},{"allOf":[{"description":"A grammar defined by the user.","type":"object","required":["definition","syntax"],"properties":{"definition":{"type":"string","description":"The grammar definition."},"syntax":{"description":"The syntax of the grammar definition. One of `lark` or `regex`.","type":"string","enum":["lark","regex"],"title":"GrammarSyntax"}},"title":"CustomGrammarFormatParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["grammar"]}}}],"description":"A grammar defined by the user."}],"title":"CustomToolParamFormat"},"name":{"type":"string","description":"The name of the custom tool, used to identify it in tool calls."}},"title":"CustomToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["custom"]}}}]}],"description":"A function or custom tool that belongs to a namespace.","title":"NamespaceToolParamTool"},"description":"The function/custom tools available inside this namespace."}},"title":"NamespaceToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["namespace"]}}}],"description":"Groups function/custom tools under a shared namespace."},{"allOf":[{"description":"Hosted or BYOT tool search configuration for deferred tools.","type":"object","properties":{"description":{"type":["string","null"],"description":"Description shown to the model for a client-executed tool search tool."},"execution":{"oneOf":[{"type":"null"},{"description":"Whether tool search is executed by the server or by the client.","type":"string","enum":["server","client"],"title":"ToolSearchExecutionType"}]},"parameters":{"description":"Parameter schema for a client-executed tool search tool."}},"title":"ToolSearchToolParam"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["tool_search"]}}}],"description":"Hosted or BYOT tool search configuration for deferred tools."},{"allOf":[{"description":" This tool searches the web for relevant results to use in a response. Learn more about the [web search\ntool](https://platform.openai.com/docs/guides/tools-web-search).","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_content_types":{"type":["array","null"],"items":{"type":"string","description":"The type of content to search for.","enum":["text","image"],"title":"SearchContentType"},"description":"The types of content to search for."},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Defaults to `approximate` when omitted in JSON input.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_preview"]}}}],"description":" This tool searches the web for relevant results to use in a response. Learn more about the [web search\ntool](https://platform.openai.com/docs/guides/tools-web-search)."},{"allOf":[{"description":"type: web_search_preview_2025_03_11","type":"object","properties":{"filters":{"oneOf":[{"type":"null"},{"description":"Filters for the search.","type":"object","properties":{"allowed_domains":{"type":["array","null"],"items":{"type":"string"},"description":"Allowed domains for the search. If not provided, all domains are allowed.\nSubdomains of the provided domains are allowed as well.\n\nExample: `[\"pubmed.ncbi.nlm.nih.gov\"]`"}},"title":"WebSearchToolFilters"}]},"search_content_types":{"type":["array","null"],"items":{"type":"string","description":"The type of content to search for.","enum":["text","image"],"title":"SearchContentType"},"description":"The types of content to search for."},"search_context_size":{"oneOf":[{"type":"null"},{"description":"High level guidance for the amount of context window space to use for the search. One of `low`,\n`medium`, or `high`. `medium` is the default.","type":"string","enum":["low","medium","high"],"title":"WebSearchToolSearchContextSize"}]},"user_location":{"oneOf":[{"type":"null"},{"description":"The approximate location of the user.","type":"object","properties":{"city":{"type":["string","null"],"description":"Free text input for the city of the user, e.g. `San Francisco`."},"country":{"type":["string","null"],"description":"The two-letter [ISO country code](https://en.wikipedia.org/wiki/ISO_3166-1) of the user,\ne.g. `US`."},"region":{"type":["string","null"],"description":"Free text input for the region of the user, e.g. `California`."},"timezone":{"type":["string","null"],"description":"The [IANA timezone](https://timeapi.io/documentation/iana-timezones) of the user, e.g.\n`America/Los_Angeles`."},"type":{"description":"The type of location approximation. Defaults to `approximate` when omitted in JSON input.","type":"string","enum":["approximate"],"title":"WebSearchApproximateLocationType"}},"title":"WebSearchApproximateLocation"}]}},"title":"WebSearchTool"},{"type":"object","required":["type"],"properties":{"type":{"type":"string","enum":["web_search_preview_2025_03_11"]}}}],"description":"type: web_search_preview_2025_03_11"},{"type":"object","description":"Allows the assistant to create, delete, or update files using unified diffs.","required":["type"],"properties":{"type":{"type":"string","enum":["apply_patch"]}}}],"description":"Definitions for model-callable tools.","title":"Tool"},"description":"An array of tools the model may call while generating a response. You\ncan specify which tool to use by setting the `tool_choice` parameter.\n\nWe support the following categories of tools:\n- **Built-in tools**: Tools that are provided by OpenAI that extend the\n model's capabilities, like [web search](https://platform.openai.com/docs/guides/tools-web-search)\n or [file search](https://platform.openai.com/docs/guides/tools-file-search). Learn more about\n [built-in tools](https://platform.openai.com/docs/guides/tools).\n- **MCP Tools**: Integrations with third-party systems via custom MCP servers\n or predefined connectors such as Google Drive and SharePoint. Learn more about\n [MCP Tools](https://platform.openai.com/docs/guides/tools-connectors-mcp).\n- **Function calls (custom tools)**: Functions that are defined by you,\n enabling the model to call your own code with strongly typed arguments\n and outputs. Learn more about\n [function calling](https://platform.openai.com/docs/guides/function-calling). You can also use\n custom tools to call your own code."},"top_logprobs":{"type":["integer","null"],"format":"int32","description":"An integer between 0 and 20 specifying the number of most likely tokens to return at each\ntoken position, each with an associated log probability.","minimum":0},"top_p":{"type":["number","null"],"format":"float","description":"An alternative to sampling with temperature, called nucleus sampling,\nwhere the model considers the results of the tokens with top_p probability\nmass. So 0.1 means only the tokens comprising the top 10% probability mass\nare considered.\n\nWe generally recommend altering this or `temperature` but not both."},"truncation":{"oneOf":[{"type":"null"},{"description":"The truncation strategy to use for the model response.\n - `auto`: If the input to this Response exceeds\n the model's context window size, the model will truncate the\n response to fit the context window by dropping items from the beginning of the conversation.\n - `disabled` (default): If the input size will exceed the context window\n size for a model, the request will fail with a 400 error.","type":"string","enum":["auto","disabled"],"title":"Truncation"}]},"usage":{"oneOf":[{"type":"null"},{"description":"Represents token usage details including input tokens, output tokens,\na breakdown of output tokens, and the total tokens used.","type":"object","required":["input_tokens","input_tokens_details","output_tokens","output_tokens_details","total_tokens"],"properties":{"input_tokens":{"type":"integer","format":"int32","description":"The number of input tokens.","minimum":0},"input_tokens_details":{"description":"A detailed breakdown of the input tokens.","type":"object","required":["cached_tokens"],"properties":{"cached_tokens":{"type":"integer","format":"int32","description":"The number of tokens that were retrieved from the cache.\n[More on prompt caching](https://platform.openai.com/docs/guides/prompt-caching).","minimum":0}},"title":"InputTokenDetails"},"output_tokens":{"type":"integer","format":"int32","description":"The number of output tokens.","minimum":0},"output_tokens_details":{"description":"A detailed breakdown of the output tokens.","type":"object","required":["reasoning_tokens"],"properties":{"reasoning_tokens":{"type":"integer","format":"int32","description":"The number of reasoning tokens.","minimum":0}},"title":"OutputTokenDetails"},"total_tokens":{"type":"integer","format":"int32","description":"The total number of tokens used.","minimum":0}},"title":"ResponseUsage"}]}},"title":"Response"},"example":{"created_at":1755639134,"id":"resp_68a4ed5e2258819485ece563a803bbf2075163a5e5b1c982","metadata":{},"model":"test","object":"response","output":[{"type":"message","content":[{"type":"output_text","annotations":[],"text":"Thank you! How can I assist you today?"}],"id":"msg_68a4ed5eb7e88194bf0b2560d8b5c0c1075163a5e5b1c982","role":"assistant","status":"completed"}],"parallel_tool_calls":true,"reasoning":{},"store":true,"service_tier":"default","status":"completed","temperature":1,"text":{"format":{"type":"text"}},"tool_choice":"auto","tools":[],"top_p":1,"truncation":"disabled","usage":{"input_tokens":13,"input_tokens_details":{"audio_tokens":null,"cached_tokens":0},"output_tokens":11,"output_tokens_details":{"accepted_prediction_tokens":null,"audio_tokens":null,"reasoning_tokens":0,"rejected_prediction_tokens":null},"total_tokens":24}}}}},"404":{"description":"The specified model was not found"},"500":{"description":"An internal server error occurred while processing the response","content":{"application/json":{"schema":{},"example":{"error":"An internal server error occurred while processing the response."}}}}}} \ No newline at end of file diff --git a/website/docs/api/HTTP/post-responses.api.mdx b/website/docs/api/HTTP/post-responses.api.mdx index 6f385c61e..55f83f909 100644 --- a/website/docs/api/HTTP/post-responses.api.mdx +++ b/website/docs/api/HTTP/post-responses.api.mdx @@ -5,7 +5,7 @@ description: "post_responses" sidebar_label: "post_responses" hide_title: true hide_table_of_contents: true -api: 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 +api: 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 sidebar_class_name: "post api-method" info_path: docs/api/HTTP/runtime custom_edit_url: null diff --git a/website/docs/api/HTTP/post-sql.StatusCodes.json b/website/docs/api/HTTP/post-sql.StatusCodes.json index 65aa96eb1..478e5bf6d 100644 --- a/website/docs/api/HTTP/post-sql.StatusCodes.json +++ b/website/docs/api/HTTP/post-sql.StatusCodes.json @@ -1 +1 @@ -{"responses":{"200":{"description":"SQL query executed successfully","content":{"application/json":{"schema":{"type":"array","items":{}},"example":[{"AVG(my_table.tip_amount)":3.072259971396793,"AVG(my_table.total_amount)":25.327816939456525,"COUNT(Int64(1))":31465,"passenger_count":0},{"AVG(my_table.tip_amount)":3.3712622884680057,"AVG(my_table.total_amount)":26.205230445474996,"COUNT(Int64(1))":2188739,"passenger_count":1},{"AVG(my_table.tip_amount)":3.7171302113290854,"AVG(my_table.total_amount)":29.520659930930304,"COUNT(Int64(1))":405103,"passenger_count":2}]},"text/csv":{"schema":{"type":"string"},"example":"\"AVG(my_table.tip_amount)\",\"AVG(my_table.total_amount)\",\"COUNT(Int64(1))\",\"passenger_count\"\n3.072259971396793,25.327816939456525,31465,0\n3.3712622884680057,26.205230445474996,2188739,1\n3.7171302113290854,29.520659930930304,405103,2"},"text/plain":{"schema":{"type":"string"},"example":"\n +----------------------------+----------------------------+----------------+---------------------+\n | \"AVG(my_table.tip_amount)\" | \"AVG(my_table.total_amount)\" | \"COUNT(Int64(1))\" | \"passenger_count\" |\n +----------------------------+----------------------------+----------------+---------------------+\n | 3.072259971396793 | 25.327816939456525 | 31465 | 0 |\n +----------------------------+----------------------------+----------------+---------------------+\n | 3.3712622884680057 | 26.205230445474996 | 2188739 | 1 |\n +----------------------------+----------------------------+----------------+---------------------+\n | 3.7171302113290854 | 29.520659930930304 | 405103 | 2 |\n +----------------------------+----------------------------+----------------+---------------------+"},"application/vnd.spiceai.sql.v1+json":{"schema":{},"example":{"row_count":3,"schema":{"fields":[{"name":"AVG(my_table.tip_amount)","data_type":"Float64","nullable":false,"dict_id":0,"dict_is_ordered":false},{"name":"AVG(my_table.total_amount)","data_type":"Float64","nullable":false,"dict_id":0,"dict_is_ordered":false},{"name":"COUNT(Int64(1))","data_type":"Int64","nullable":false,"dict_id":0,"dict_is_ordered":false},{"name":"passenger_count","data_type":"Int64","nullable":false,"dict_id":0,"dict_is_ordered":false}]},"data":[{"AVG(my_table.tip_amount)":3.072259971396793,"AVG(my_table.total_amount)":25.327816939456525,"COUNT(Int64(1))":31465,"passenger_count":0},{"AVG(my_table.tip_amount)":3.3712622884680057,"AVG(my_table.total_amount)":26.205230445474996,"COUNT(Int64(1))":2188739,"passenger_count":1},{"AVG(my_table.tip_amount)":3.7171302113290854,"AVG(my_table.total_amount)":29.520659930930304,"COUNT(Int64(1))":405103,"passenger_count":2}]}}}},"400":{"description":"Invalid SQL query or malformed input","content":{"text/plain":{"schema":{"type":"string"},"example":"Error reading query: invalid UTF-8 sequence"}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"type":"string"},"example":"Unexpected internal server error occurred"}}}}} \ No newline at end of file +{"responses":{"200":{"description":"SQL query executed successfully","headers":{"Server-Timing":{"schema":{"type":"string"},"description":"The time the server spent on the query, in milliseconds: `total;dur=` (W3C Server-Timing). Sent on every response whose body is complete before its head is sent — every format except the default streamed `application/json`, and every error. A streamed `application/json` body is not complete until it ends, so it sends the field as a trailer instead (declared by `Trailer: Server-Timing`) when the request accepts trailers: HTTP/2, or `TE: trailers` on HTTP/1.1."}},"content":{"application/json":{"schema":{"type":"array","items":{}},"example":[{"AVG(my_table.tip_amount)":3.072259971396793,"AVG(my_table.total_amount)":25.327816939456525,"COUNT(Int64(1))":31465,"passenger_count":0},{"AVG(my_table.tip_amount)":3.3712622884680057,"AVG(my_table.total_amount)":26.205230445474996,"COUNT(Int64(1))":2188739,"passenger_count":1},{"AVG(my_table.tip_amount)":3.7171302113290854,"AVG(my_table.total_amount)":29.520659930930304,"COUNT(Int64(1))":405103,"passenger_count":2}]},"text/csv":{"schema":{"type":"string"},"example":"\"AVG(my_table.tip_amount)\",\"AVG(my_table.total_amount)\",\"COUNT(Int64(1))\",\"passenger_count\"\n3.072259971396793,25.327816939456525,31465,0\n3.3712622884680057,26.205230445474996,2188739,1\n3.7171302113290854,29.520659930930304,405103,2"},"text/plain":{"schema":{"type":"string"},"example":"\n +----------------------------+----------------------------+----------------+---------------------+\n | \"AVG(my_table.tip_amount)\" | \"AVG(my_table.total_amount)\" | \"COUNT(Int64(1))\" | \"passenger_count\" |\n +----------------------------+----------------------------+----------------+---------------------+\n | 3.072259971396793 | 25.327816939456525 | 31465 | 0 |\n +----------------------------+----------------------------+----------------+---------------------+\n | 3.3712622884680057 | 26.205230445474996 | 2188739 | 1 |\n +----------------------------+----------------------------+----------------+---------------------+\n | 3.7171302113290854 | 29.520659930930304 | 405103 | 2 |\n +----------------------------+----------------------------+----------------+---------------------+"},"application/vnd.spiceai.sql.v1+json":{"schema":{},"example":{"row_count":3,"schema":{"fields":[{"name":"AVG(my_table.tip_amount)","data_type":"Float64","nullable":false,"dict_id":0,"dict_is_ordered":false},{"name":"AVG(my_table.total_amount)","data_type":"Float64","nullable":false,"dict_id":0,"dict_is_ordered":false},{"name":"COUNT(Int64(1))","data_type":"Int64","nullable":false,"dict_id":0,"dict_is_ordered":false},{"name":"passenger_count","data_type":"Int64","nullable":false,"dict_id":0,"dict_is_ordered":false}]},"data":[{"AVG(my_table.tip_amount)":3.072259971396793,"AVG(my_table.total_amount)":25.327816939456525,"COUNT(Int64(1))":31465,"passenger_count":0},{"AVG(my_table.tip_amount)":3.3712622884680057,"AVG(my_table.total_amount)":26.205230445474996,"COUNT(Int64(1))":2188739,"passenger_count":1},{"AVG(my_table.tip_amount)":3.7171302113290854,"AVG(my_table.total_amount)":29.520659930930304,"COUNT(Int64(1))":405103,"passenger_count":2}]}}}},"400":{"description":"Invalid SQL query or malformed input","content":{"text/plain":{"schema":{"type":"string"},"example":"Error reading query: invalid UTF-8 sequence"}}},"500":{"description":"Internal server error","content":{"text/plain":{"schema":{"type":"string"},"example":"Unexpected internal server error occurred"}}}}} \ No newline at end of file diff --git a/website/docs/api/HTTP/post-sql.api.mdx b/website/docs/api/HTTP/post-sql.api.mdx index eb732400a..a1bb53478 100644 --- a/website/docs/api/HTTP/post-sql.api.mdx +++ b/website/docs/api/HTTP/post-sql.api.mdx @@ -5,7 +5,7 @@ description: "Execute a SQL query and return the results." sidebar_label: "SQL Query" hide_title: true hide_table_of_contents: true -api: eJztWG1v2zYQ/isEvyRFFEUvfpO+pVm6BUiXNnEGDEngstLZ5kaTCkk5MTz/9+Eou5FsNX3bsBaYvsS5O97dc3c88riklk0MTW/o1dtzeufRHEymeWG5kjSlp4+QlRYII1dvz8l9CXpBmMyJBltqSewUiAZTCmv8W3krh1NuCMi8UFxawoRQD4aUBrQhVhFYK9uo4mBIzjVkVizIWKsZYZL8Mhy+IRruSzDWJ8Mp1CxzQwygYkMKwbgkFh4t4Rs/3BryXuULn3pUFaAZwjjLaUoLZezI3Avq0YJpNgMLGmEvqWQzoCk9zjIoLPUoR9xTYDlouh0OdGes9IxZosYb9IWSBjyiJCBxjxWF4JmzfPSHUXKP7OcwZqWwL7wmdy5z3xQ8A8Z9cy/8eXjgFnhkD4EdZWa+R5Re/+cQ7yEyRMo15DS1ugSPmmwKM0bTJbWLArEYq7mc0NXqrhIGY1+qfIESTTxPoX1KD/VopqQFaVF+Gw3SPthbeRQe2awQ4Mj3AlWenp+eDEk6VoockJAcX2GcRkyaBxfQevSXdKwUTTvharXy6BPKhpFtUDWbG2NsPtm3yjIxYjNVSgy0I/HiiZDh3/3whUcKZgzICeiRo5FXlxevyWwxsuy9APLz5cX1G/Ly9x2xi8ufTi/bGMdXJ+T87PXZkMQUcTTT4whVjTjEURA8l4d1EnJiyiwDY8alEIsvSMkmWkxrhuu4hRnaXdXjdrOkx7/9vL/B7NcCRdPYD/pR1E2SfhgnvX4Se1vC9UDTNOr6cdQfhL0kTjrdXjfqevTk4vrX4f6ZtL3OfvgCdYadXhdz34gcTYOV97wrcT+MelE0GHR6gyDo9j/hS8+Pgm4UB51Ot9PvJEmvxZcoHAz6cdLiTfgpb/phP4yDKAzjKAkG3c4nvEn8bhT0ukkSB0kcxEGnxZtO0A2DuMWZaHW32ROZmX/2jrj9KIBb6m0z6/469pZ7jrbl2S29lbsl0lIFVc4DlN7JYkuiNmkJccFOoFtiuY5cRL+uddxKUvsODp/5vozZLn3QtPcXeS5RbfxmrpzATrYcdSdfaO6/RrtTMQ3ubvXUl2Id1aUDsvt9BwC3i7wBcKfe68yq8p8I4fcJcHtTNgDu7M8as9qpdenvASC2g8+4jT1z4dHqYdOt4/otbMxB5M3L5ccOFY/mzLLRuk+9EorZXod6VJZCoDBNx0wY8GjOMzviOU2DzW8zUjoHd89wMnh4tZprnEr/jsHtY61pxdG/2cb2CfnP2cCDFnX9fzH6US5Gbl7otN2kz+ScCZ7XhkalyYwJnNogJ1wWpW1ep7/i7nCqtdJEA8u5nFRmUsLXlq+Hrw4HxODYJTOgztVuu6sWtGSCGNBz0ARQ6zf7di3hsYDMOrAtBojKslJj9VdRnIGdqs2E7OYzO6UpPZqHR9W4XC2u2lmpccSbWlukR0dCZUxMlbHpIEiCnVn5HNkkhzkIVcxwbK80+eREyTGflBrIA7dT8u7wEDW+8ynOqwayUnO7cPZYwUd/Av6+Qx6XY+Xgc+uw6lJaPoPWMd218pw8iQiegTSucW/aZMGyKRxGPjrPc5CWjznoJmflUYRfKY78wA8OS2lcXSMPozZjsqYVK+8tlsS2W8unzP7I7yrr2quV5sqrCmO5Lp4bOg+xcO4FPihhhSBtuXzPDFxrsVoh2VnGxHp0zjSvevYNtuL12wvm3+WenlRhOxyiZRQXpRtxt+dg7FLVig+POR+XvauV/puLqyH16Pv1G8lM5a662AM+trAHmlL3noSr3QzvaEsqmJyUbIKylU78/gaBRcmx +api: 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 sidebar_class_name: "post api-method" info_path: docs/api/HTTP/runtime custom_edit_url: null diff --git a/website/docs/api/HTTP/sidebar.ts b/website/docs/api/HTTP/sidebar.ts index 12c4443d5..cb55d41a4 100644 --- a/website/docs/api/HTTP/sidebar.ts +++ b/website/docs/api/HTTP/sidebar.ts @@ -46,6 +46,12 @@ const sidebar: SidebarsConfig = { label: "post_responses", className: "api-method post", }, + { + type: "doc", + id: "api/HTTP/post-decisions", + label: "Create a decision", + className: "api-method post", + }, ], }, { @@ -97,7 +103,7 @@ const sidebar: SidebarsConfig = { { type: "doc", id: "api/HTTP/get-namespace", - label: "Check if a namespace exists.", + label: "Load an Iceberg namespace", className: "api-method get", }, { @@ -115,7 +121,7 @@ const sidebar: SidebarsConfig = { { type: "doc", id: "api/HTTP/get-table", - label: "Get a table.", + label: "Load a table.", className: "api-method get", }, { diff --git a/website/docs/api/overview.md b/website/docs/api/overview.md index 51ce6eac5..b6a2175ef 100644 --- a/website/docs/api/overview.md +++ b/website/docs/api/overview.md @@ -29,3 +29,15 @@ Spice provides high-performance, industry-standard APIs: ### Request Correlation HTTP, Arrow Flight, and Flight SQL requests accept a `spice-trace-id` header (gRPC metadata for Flight) carrying a 32-character hexadecimal trace ID. The runtime records the ID in [`runtime.task_history`](../reference/task_history#correlating-requests-with-spice-trace-id) and prefixes the query's log records with it. SQL query responses return the ID in a `spice-trace-id` header. + +### Server Timing + +SQL query responses report the time the runtime spent on the query in a [`Server-Timing`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Server-Timing) field with one `total` metric in milliseconds, so a client can separate server time from network time: + +```text +server-timing: total;dur=12.345 +``` + +On HTTP [`/v1/sql`](HTTP/post-sql), a response whose body is complete before it is sent, such as CSV or an error, carries `Server-Timing` as a header. The default streamed JSON body sends it as a trailer after the body, declared by a `Trailer: Server-Timing` header, when the request accepts trailers: over HTTP/2, or over HTTP/1.1 with a `TE: trailers` request header. Otherwise the streamed response has no `Server-Timing` field. + +On Arrow Flight and Flight SQL, a query `DoGet` that completes ends with a `server-timing` trailer. When the same runtime served the `GetFlightInfo` that issued the ticket, the value is the sum of the time spent in both calls, not the time between them. diff --git a/website/docs/api/tls/index.md b/website/docs/api/tls/index.md index c52b33312..78f664915 100644 --- a/website/docs/api/tls/index.md +++ b/website/docs/api/tls/index.md @@ -103,6 +103,10 @@ When using inline certificates or secrets (`certificate` / `key`), changes are n ::: +## Handshake Timeout + +The Arrow Flight listener closes a connection whose client does not complete the TLS handshake within 10 seconds, and logs the failure at `DEBUG`. A connection that opens but never starts the handshake therefore cannot hold one of the listener's handshake slots indefinitely. + ## Output When TLS is enabled, the runtime output will print the TLS certificate details. diff --git a/website/docs/components/catalogs/iceberg.md b/website/docs/components/catalogs/iceberg.md index 513a5711d..0b887cf97 100644 --- a/website/docs/components/catalogs/iceberg.md +++ b/website/docs/components/catalogs/iceberg.md @@ -136,7 +136,7 @@ The following parameters are supported for configuring the connection to the Ice | `iceberg_gcs_service_path` | Custom endpoint URL for GCS (for emulators or custom endpoints). | | `iceberg_gcs_no_auth` | Set to `true` to allow anonymous access to GCS (for public buckets). | -The Iceberg Catalog Connector supports both REST and Hadoop-style Catalogs. In both cases, the warehouse path (for example, s3://bucket/warehouse/) specifies the object store location where tables are physically stored. With a Hadoop-style Catalog, the metadata is resolved directly from the filesystem using the Hadoop convention (by reading `metadata/version-hint.text`, or otherwise the metadata file with the highest version number; see [Find the current metadata file](../data-connectors/iceberg#find-the-current-metadata-file)), rather than through a catalog service. The warehouse path itself does not change between using a REST Catalog and a Hadoop-style Catalog — only how the metadata is discovered and managed differs. The warehouse path is discovered automatically from the catalog service, but must be explicitly specified when using Hadoop-style Iceberg tables. Hadoop-style catalogs are most commonly used for local development or legacy deployments. +The Iceberg Catalog Connector supports both REST and Hadoop-style Catalogs. In both cases, the warehouse path (for example, s3://bucket/warehouse/) specifies the object store location where tables are physically stored. With a Hadoop-style Catalog, the metadata is resolved directly from the filesystem using the Hadoop convention (the newest committed version from the one `metadata/version-hint.text` names, or otherwise the metadata file with the highest version number; see [Find the current metadata file](../data-connectors/iceberg#find-the-current-metadata-file)), rather than through a catalog service. The warehouse path itself does not change between using a REST Catalog and a Hadoop-style Catalog — only how the metadata is discovered and managed differs. The warehouse path is discovered automatically from the catalog service, but must be explicitly specified when using Hadoop-style Iceberg tables. Hadoop-style catalogs are most commonly used for local development or legacy deployments. Example using Hadoop Catalog with a local warehouse: diff --git a/website/docs/components/data-accelerators/cayenne/deployment.md b/website/docs/components/data-accelerators/cayenne/deployment.md index fa0906782..755b96710 100644 --- a/website/docs/components/data-accelerators/cayenne/deployment.md +++ b/website/docs/components/data-accelerators/cayenne/deployment.md @@ -275,7 +275,7 @@ Cayenne refresh, append, and query operations participate in [task history](../. | Dataset fails to load naming a data directory that contains the metastore directory | The resolved metastore sits inside the dataset's data directory — commonly a dataset named `metadata` under the stock defaults. | Set `cayenne_metadata_dir` outside the data directory, or rename the dataset. See [Metastore location](./index.md#metastore-location). | | Acceleration appears empty after a restart, or after changing `cayenne_metadata_dir` | The parameter now points at a different directory than the catalog that holds the manifests. Prior Vortex files are orphaned without an error. | Point `cayenne_metadata_dir` back at the existing metadata location (that adopts the catalog in place). To move the catalog, stop Spice with a graceful shutdown (`SIGTERM`) first so the WAL is checkpointed and no writer is active, then move `cayenne.db` together with its `-wal` and `-shm` sidecars. Moving those files while Cayenne is writing can leave the catalog inconsistent. Set the same explicit `cayenne_metadata_dir` on every Cayenne dataset. See [Metastore location](./index.md#metastore-location). | | Load refused: datasets use different `cayenne_file_path` values without a shared `cayenne_metadata_dir` | A local `cayenne_file_path` with no `cayenne_metadata_dir` resolves the catalog to `{cayenne_file_path}/metadata` for that data root, not to the `{spice_data_path}/metadata` fallback. The runtime opens one shared catalog from whichever dataset initializes it first, so the other root's manifests would be unused. | Set the same `cayenne_metadata_dir` on every Cayenne dataset. See [Metastore location](./index.md#metastore-location). | -| File count keeps growing on a primary-key table under continuous writes, and the runtime warns `Protected-snapshot compaction is being starved` | With position deletes, compaction must take the table's write lock, and a continuous writer holds it on every attempt. A primary-key table uses position deletes only when `cayenne_deletion_mode: position` is set explicitly; the default `auto` resolves to key deletes. | Set `cayenne_deletion_mode: key`, or remove the setting. Key-delete compaction runs concurrently with writers. See [Deletion Strategies](./index.md#deletion-strategies). | +| File count keeps growing on a primary-key table under continuous writes, and the runtime warns `Protected-snapshot compaction is being starved` | Under an explicit `cayenne_deletion_mode: position`, compaction must take the table's write lock, and a continuous writer holds it on every attempt. Under the default `auto`, a primary-key table compacts alongside its writers on either kind of delete. | Set `cayenne_deletion_mode: key`, or remove the setting. Key-delete compaction runs concurrently with writers. See [Deletion Strategies](./index.md#deletion-strategies). | | Query slower than expected for cold data | Segment cache too small for the working set of every table sharing it. | Increase `runtime.params.cayenne_segment_cache_mb`. | | High S3 request cost | Segment cache misses on every query. | Increase `runtime.params.cayenne_segment_cache_mb`; consider `partition_by` aligned with query filters. | | Upload throughput does not scale with concurrency | Network or S3 Express One Zone TPS limit. | Use S3 Express One Zone in the same AZ; benchmark with `upload_concurrency` to find the right setting. | diff --git a/website/docs/components/data-accelerators/cayenne/index.md b/website/docs/components/data-accelerators/cayenne/index.md index 3b05c3653..9166d9078 100644 --- a/website/docs/components/data-accelerators/cayenne/index.md +++ b/website/docs/components/data-accelerators/cayenne/index.md @@ -90,7 +90,7 @@ Set under a dataset's `acceleration.params`: | `cayenne_metastore` | Metastore backend type. Supports `sqlite` (default) or `turso` (requires `turso` feature flag). | | `cayenne_upload_concurrency` | Maximum number of concurrent file uploads when writing multiple Vortex files to S3 Express One Zone. Accepts `auto` (default) or an explicit value; `auto` uses the runtime's [CPU entitlement](../../reference/spicepod/runtime#runtimecpu) in whole cores. The aggregate encode concurrency across all Cayenne tables is separately bounded by a process-global budget sized from that same entitlement, less a query reserve of a quarter of the cores (at least 2). | | `cayenne_write_concurrency` | Writer partition override for unsorted ingests, controlling how many Vortex files are encoded in parallel during a write. Accepts `auto` (default) or an explicit value. `auto` encodes up to `min(4, session target_partitions)` files in parallel per write — an intentionally small per-table default (not the full CPU entitlement), so many independently-writing tables do not oversubscribe CPU under concurrent CDC. An explicitly-set value is capped at the session `target_partitions`, which defaults to the runtime's [CPU entitlement](../../reference/spicepod/runtime#runtimecpu) in whole cores; the aggregate encode concurrency across all Cayenne tables is separately bounded by a process-global budget sized from that entitlement. Values below `1` are clamped to `1`. The sort-and-rewrite compaction path always writes serially regardless of this setting. | -| `cayenne_deletion_mode` | How primary-key deletions are recorded and applied. Accepts `auto`, `key`, or `position`; defaults to `auto`, which resolves to `key` for a table that declares a `primary_key` and to `position` (merge-on-read) for a table without one. See [Deletion Strategies](#deletion-strategies). | +| `cayenne_deletion_mode` | How primary-key deletions are recorded and applied. Accepts `auto`, `key`, or `position`; defaults to `auto`, which uses `position` (merge-on-read) deletes for a table without a `primary_key`, and chooses for each primary-key table: position deletes while a table on local disk is small, and key deletes otherwise. See [Deletion Strategies](#deletion-strategies). | | `cayenne_pk_conflict_detection` | Controls primary-key conflict detection on insert. Accepts `auto` or `none`; defaults to `auto`, which detects existing primary keys and resolves them as merge-on-read upserts. Set to `none` to skip conflict detection (blind append), so repeated keys are stored as written. Registration refuses `none` on a dataset that rewrites stored keys: `refresh_mode: changes`, durable write-back, or writes kept in the accelerator. See [Turning off conflict detection](#turning-off-conflict-detection). | | `cayenne_compaction_trigger_files` | Minimum number of small Vortex files in the current snapshot before tiered compaction runs. A "small" file is one whose size is below `cayenne_target_file_size_mb` / 4. Defaults to `4` for `refresh_mode: caching` / `changes`, or `append` with `refresh_check_interval` ≤ 5m; `8` otherwise. A value of `1` is clamped to a minimum of `2`. | | `cayenne_compaction_trigger_protected_snapshots` | Number of protected snapshots before snapshot-maintenance compaction runs. Separate from `cayenne_compaction_trigger_files` so small-file tuning does not silently change scan amplification behavior. Defaults to `4` for `refresh_mode: caching` / `changes`, or `append` with `refresh_check_interval` ≤ 5m; `8` otherwise. A value of `1` is clamped to a minimum of `2`. | @@ -445,7 +445,7 @@ How deletions are recorded and applied is controlled by the `cayenne_deletion_mo | Mode | How deletes are applied | | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `auto` (default) | Resolves to `key` for a table that declares a `primary_key`, so deletes compact concurrently with writers. Resolves to `position` for a table without a primary key, which has no key to record. | +| `auto` (default) | Chooses for each table. A primary-key table on local disk uses `position` deletes while it is at most 1/32 of its target file size on disk, and never more than 8 MiB, and `key` deletes once it grows past that. A primary-key table uses `key` deletes from the start on a runtime with fewer than 8 physical CPU cores, on a host that does not report its CPU topology, or off Linux, and always when it uses `refresh_mode: changes`, object storage, `mode: memory`, `partition_by`, or a [cold tier](#cold-object-store-tier). A table without a primary key uses `position` deletes, because it has no key to record. | | `position` | Per-file row-position `RoaringBitmap`s are pushed into the Vortex scan, skipping deleted rows at the storage layer with no per-row CPU cost. | | `key` | Deletes are applied above the Vortex scan via a per-row probe on the byte representation of the primary key columns. This is the recommended mode for primary-key tables under continuous writes, because compaction can keep running while writes continue. | @@ -461,18 +461,14 @@ datasets: refresh_append_overlap: 1h primary_key: event_id params: - cayenne_deletion_mode: key # same as the default `auto` on a primary-key table + cayenne_deletion_mode: key # key deletes at any table size ``` -For a table with a `primary_key`, the default `auto` resolves to `key` regardless of `refresh_mode`, so no setting is needed. Key-delete compaction runs concurrently with writers, and the in-memory key deletion index is pruned in the background so it stays bounded. Setting `cayenne_deletion_mode: position` on a primary-key table opts into merge-on-read position deletes. Under position deletes, compaction must take the table's write lock, so a continuous writer can block it on every attempt, and the table's file count grows until writes pause. The runtime then logs a warning that begins `Protected-snapshot compaction is being starved`. +Under `auto`, a small primary-key table on position deletes is compacted by rewriting it whole, alongside its writers, so its scans read one snapshot with no deletion filter. A table that grows past the bound switches to key deletes until it is next opened, when its size is checked again. Under key deletes, compaction runs concurrently with writers, and the in-memory key deletion index is pruned in the background so it stays bounded. The `Cayenne auto-tuned config` line that Spice logs when a table opens names the choice and its reason as `deletion_mode`, for example `deletion_mode=auto (position deletes up to 8 MiB, then key deletes)`, `deletion_mode=auto (key deletes: position deletes need Linux)`, or `deletion_mode=key (auto: partitioned dataset)`. -:::note[Change from v2.4.0-rc.1 and earlier] +Setting `cayenne_deletion_mode: key` uses key deletes at any table size. Setting `cayenne_deletion_mode: position` on a primary-key table keeps merge-on-read position deletes at any size. Under an explicit `position`, compaction must take the table's write lock, so a continuous writer can block it on every attempt, and the table's file count grows until writes pause. The runtime then logs a warning that begins `Protected-snapshot compaction is being starved`. -In v2.4.0-rc.1 and earlier releases, `auto` resolved to `key` only for a CDC dataset (`refresh_mode: changes`) or a [cold-tier](#cold-object-store-tier) table that has a primary key, and to `position` for every other table. A primary-key table that relied on the default, such as an `append` or `full` table, now uses key deletes. Position deletion vectors already on disk continue to load and apply after the mode changes. To keep position deletes, set `cayenne_deletion_mode: position` explicitly. - -::: - -Under `position` mode (the `auto` resolution for a table without a primary key, or an explicit `cayenne_deletion_mode: position`): +Under `position` mode (a table without a primary key, a small primary-key table under `auto`, or an explicit `cayenne_deletion_mode: position`): - **Tables without a primary key** record deletions by row position. Cayenne uses `RoaringBitmap` for memory-efficient storage of deleted row IDs, providing 50-90% memory savings compared to `HashSet` for sparse deletions. - **Tables with a primary key** capture row positions via a `row_idx()` read-back after each write, with a key-based fallback for any row whose position is not yet known. Pushing the deletes into the scan eliminates the per-row `RowConverter` deletion tax above it. @@ -648,7 +644,7 @@ The unprefixed `pk_conflict_detection` parameter is checked too; when both are s Failed to register dataset events (postgres): 'cayenne_pk_conflict_detection: none' turns off the primary-key check Cayenne uses to replace a stored row, but this dataset applies its source's changes ('refresh_mode: changes'), so a change to an existing key would add a second row for that key instead of replacing it. Set 'cayenne_pk_conflict_detection' to 'auto', its default. See: https://spiceai.org/docs/components/data-accelerators/cayenne ``` -The setting is stored with a `mode: file` table, and a table created with `none` can hold more than one row per key. When the table has a primary key, reopening it with `auto` fails. A table without a primary key has no key to repeat, so it reopens with `auto`. The failure for a keyed table: +The setting is stored with a `mode: file` table, and a table created with `none` can hold more than one row per key. A `refresh_mode: full` dataset with `write_mode: write_through` is rebuilt from the source with `auto` (see [Changing Acceleration Settings](#changing-acceleration-settings)). For any other dataset whose table has a primary key, reopening it with `auto` fails. A table without a primary key has no key to repeat, so it reopens with `auto`. The failure for a keyed table: ```text Failed to load table 'events': it was created with 'cayenne_pk_conflict_detection: none', so it can hold more than one row per primary key, and the setting is now 'auto'. An existing table keeps the setting it was created with. To rebuild it from the source with one row per primary key, restart once with 'acceleration.mode: file_create', and with 'write_mode: write_through' if the dataset uses 'write_mode: write_back', then set both back. Rows that exist only in the acceleration are not kept. @@ -671,7 +667,7 @@ The following behaviors differ from Spice v2.3 and earlier: - An `UPDATE` that moved a row onto another row's key, or set a key to `NULL`, could remove a row. It now fails and changes nothing. - Setting `on_conflict` on a read-write dataset kept its writes in the acceleration when the source accepts only reads. Set [`acceleration.write_mode: acceleration`](../../../reference/spicepod/datasets.md#accelerationwrite_mode) instead. -[Durable write-back](#transactions) and [PostgreSQL](../../../features/cdc/postgres-replication.md), [MySQL](../../../features/cdc/mysql-replication.md), and [MongoDB](../../../features/cdc/mongodb-streams.md) change streams need only `primary_key`, so `on_conflict` can be removed from them. Spice v2.4.0-rc.1 refused a write-back dataset without an `on_conflict` upsert on the primary key. +[Durable write-back](#transactions) and [PostgreSQL](../../../features/cdc/postgres-replication.md), [MySQL](../../../features/cdc/mysql-replication.md), and [MongoDB](../../../features/cdc/mongodb-streams.md) change streams need only `primary_key`, so `on_conflict` can be removed from them. ### Writes in memory mode @@ -1046,12 +1042,45 @@ Before a source deletion, writes must stop and pending keys must reach zero **wh - Nullability-predicate gates (`IS NOT NULL`, `IS NULL`, `COALESCE`) are not yet reliable — prefer comparison gates. - A gated write whose superseded row is still in the in-memory/inline tier (recently CDC-streamed rows) is rejected; file-backed rows are supported. +## Changing Acceleration Settings + +When a restart gives a `mode: file` or `mode: file_update` Cayenne table settings that differ from the ones it was created with, the result depends on whether a setting changes how rows are written or what the stored rows mean, and on whether a reload from the source brings back every stored row: + +| Setting that differs from the stored table | `refresh_mode: full` with `write_mode: write_through` | Any other refresh mode or write mode | +| --- | --- | --- | +| `cayenne_sort_columns`, `cayenne_cluster_by`, `cayenne_compression_strategy`, `cayenne_delta_encoding`, `cayenne_shard_key_columns`, or `cayenne_pk_conflict_detection` from `auto` to `none` | Applied in place | Applied in place | +| `primary_key`, `partition_by`, `cayenne_pk_conflict_detection` from `none` to `auto`, or the data location | Rebuilt from the source | Kept, with a warning. A `partition_by` change, or `cayenne_pk_conflict_detection` from `none` to `auto`, fails the dataset instead. | + +**Applied in place.** The table keeps its existing files and serves them immediately, and Spice logs the change: + +```text +Applied the changed acceleration settings of dataset 'trips' to its existing acceleration in place (`cayenne_sort_columns`: none -> ['val']). Rows already stored keep their current layout until a refresh or compaction rewrites them. +``` + +**Rebuilt from the source.** Every full refresh rewrites every row, and every acknowledged write is in the source, so Spice drops the acceleration and loads it from the source with the new settings, as on a first start: + +```text +The existing acceleration of dataset 'trips' was built with settings it cannot adopt in place (`primary_key`: ['id'] -> ['cat']), so it is dropped and reloaded from the source with the new settings. +``` + +Spice drops the acceleration only once the source answers a read on the dataset's schema, through its `refresh_sql` when it has one, within 30 seconds. While the source cannot be read, the dataset serves its existing acceleration with the stored settings and logs a warning, and a restart with the source readable rebuilds it. A `partition_by` change and a `cayenne_pk_conflict_detection` change from `none` to `auto` cannot be served from the stored rows, so while the source cannot be read, they fail the dataset with an error that names both fixes: revert the setting, or restart once the source can be read. A `sink` dataset is never rebuilt, because its rows exist only in the acceleration. + +When the data location differs, the rebuild deletes the local directory the table was stored in. Files in object storage are left in place, and a warning names the prefixes to delete. Spice detects a different data location only when the [metastore](#metastore-location) stays where it was: an explicit `cayenne_metadata_dir`, or the default metastore location on both sides. + +**Kept, with a warning.** An `append` or `changes` refresh, `write_mode: acceleration`, and `write_mode: write_back` can hold rows that a reload does not bring back, so the table keeps the settings it was built with: + +```text +Dataset 'trips' keeps the settings its existing acceleration was built with, so the changed settings (`primary_key`: ['id'] -> ['val']) do not take effect: they cannot be applied to stored rows in place, and an acceleration is rebuilt from the source automatically only when a reload brings back every row it holds (`refresh_mode: full` with `write_mode: write_through`, from a source other than `sink`). To rebuild it with the new settings, restart once with `mode: file_create` (and `write_mode: write_through` if the dataset uses `write_mode: write_back`), then set them back; rows that exist only in the acceleration are not kept. See: https://spiceai.org/docs/components/data-accelerators/cayenne +``` + +To apply the new settings, restart once with `mode: file_create`, and with `write_mode: write_through` if the dataset uses `write_mode: write_back`, then set both back. Rows that exist only in the acceleration are lost. A `partition_by` change fails these datasets instead of being kept; see [Changing `partition_by` after refresh](../../../features/data-acceleration/partitioning.md#changing-partition_by-after-refresh). So does a change of `cayenne_pk_conflict_detection` from `none` to `auto`; see [Turning off conflict detection](#turning-off-conflict-detection). + ## Limitations Consider the following limitations when using Spice Cayenne acceleration: - **Memory Mode Constraints**: `mode: memory` (fully in-RAM, ephemeral) is supported alongside `mode: file`, but it does not persist any data (the dataset reloads from its source on restart), does not support partitioned tables (`partition_by`), and enforces a hard per-table RAM bound instead of spilling to disk — a breach returns an error rather than growing without limit. Use `mode: file` when persistence across restarts is required. DML and [`retention_sql`](../../reference/spicepod/datasets#accelerationretention_sql) are not among the constraints — see [Writes in memory mode](#writes-in-memory-mode). -- **No Re-partitioning**: Cayenne does not re-partition stored data. A `mode: file` dataset whose stored data was written with different partition columns fails to load. Changing `partition_by` requires rebuilding the acceleration, which can lose rows that exist only in Cayenne. See [Changing `partition_by` after refresh](../../../features/data-acceleration/partitioning.md#changing-partition_by-after-refresh). +- **No Re-partitioning**: Cayenne does not re-partition stored data. A `refresh_mode: full` dataset with `write_mode: write_through` is rebuilt from the source when `partition_by` changes. Any other `mode: file` dataset whose stored data was written with different partition columns fails to load, and changing its `partition_by` requires rebuilding the acceleration by hand, which can lose rows that exist only in Cayenne. See [Changing `partition_by` after refresh](../../../features/data-acceleration/partitioning.md#changing-partition_by-after-refresh). - **S3 Express Only**: Standard S3 buckets are not supported for remote storage. Only S3 Express One Zone directory buckets are supported. - **Unsupported Data Types**: `Interval`, `Duration`, `FixedSizeBinary`, `Union`, and `RunEndEncoded` types require `unsupported_type_action` configuration. - **Indexes**: `indexes` builds a read-path [secondary index](#secondary-indexes), not a database index — a `unique` entry does not constrain writes, and registration logs a warning saying so. Deduplication requires only `primary_key`, with `cayenne_pk_conflict_detection` at its default `auto`. See [Duplicate primary keys in one write](#duplicate-primary-keys-in-one-write). diff --git a/website/docs/components/data-accelerators/cayenne/performance.md b/website/docs/components/data-accelerators/cayenne/performance.md index beeb34e26..d24cc5e12 100644 --- a/website/docs/components/data-accelerators/cayenne/performance.md +++ b/website/docs/components/data-accelerators/cayenne/performance.md @@ -162,11 +162,7 @@ Adaptive tuning needs a non-zero `cayenne_compaction_background_interval_ms`, si In both modes, setting any `cayenne_*` knob to an explicit value overrides the derived value. With adaptive tuning enabled, an explicitly-set knob is **pinned** — the controller will not move it. -:::note[Renamed in v2.4] - -Earlier releases, including v2.4.0-rc.1, set the mode per dataset with `cayenne_tuning` and the targets with `cayenne_goal_*`. Those names are no longer read; Spice logs a warning naming each replacement. See [Migrating from `cayenne_tuning` and `cayenne_goal_*`](../../../reference/spicepod/runtime.md#migrate-from-cayenne-tuning). - -::: +Spice does not read `cayenne_tuning` or `cayenne_goal_*` parameters. It logs a startup warning for each one set, naming the runtime setting to use instead. See [Unsupported tuning parameters](../../../reference/spicepod/runtime.md#unsupported-tuning-parameters). ### Goal-driven tuning diff --git a/website/docs/components/data-connectors/https/deployment.md b/website/docs/components/data-connectors/https/deployment.md index 0f1a6e744..1e0e31ac1 100644 --- a/website/docs/components/data-connectors/https/deployment.md +++ b/website/docs/components/data-connectors/https/deployment.md @@ -61,7 +61,7 @@ The HTTP connector participates in the shared HTTP rate control system. Concurre | `rate_control_failure_threshold` | Upstream error rate above which adaptive rate control admits fewer requests. Defaults to `10%`. | | `rate_control_window` | Reaction and recovery window of adaptive rate control. Defaults to `10s`. | -The runtime equivalents (`http_max_concurrent_requests`, `http_requests_per_second_limit`, `http_requests_per_minute_limit`, `http_rate_control_jitter_min`, `http_rate_control_jitter_max`, `http_rate_control_acquire_timeout`, `http_rate_control_failure_threshold`, `http_rate_control_window`) set defaults that apply to every HTTP-based connector unless overridden per dataset. Datasets that share an origin must use the same values, or the later dataset fails to load. +The runtime equivalents (`http_max_concurrent_requests`, `http_requests_per_second_limit`, `http_requests_per_minute_limit`, `http_rate_control_jitter_min`, `http_rate_control_jitter_max`, `http_rate_control_acquire_timeout`, `http_rate_control_failure_threshold`, `http_rate_control_window`) set defaults that apply to every HTTP-based connector unless overridden per dataset. Datasets that share an origin must resolve to the same values, or the later dataset fails to load. See [Components that share an origin](../../../reference/spicepod/runtime#components-that-share-an-origin). ```yaml runtime: @@ -198,7 +198,7 @@ HTTP requests participate in [task history](../../../reference/task_history) thr | Refresh blocked / queue building up | `max_concurrent_requests` set too low for the workload. | Raise the dataset-level limit or move heavy datasets to their own origin. | | `Timed out after ... waiting for rate-control capacity` | Requests queue for capacity longer than `rate_control_acquire_timeout` (default `client_timeout`). | Raise the limit, lower request concurrency, or raise `rate_control_acquire_timeout`; `0` waits without a bound. | | Fewer requests than the configured limits reach the origin | The origin is failing above `rate_control_failure_threshold`, so adaptive rate control throttles it. | Check `dataset_http_rate_control_adaptive_admission_ratio` and the origin's health; raise `rate_control_failure_threshold` to tolerate more errors. | -| `Multiple HTTP-based components target ... with different rate-control settings` | Datasets sharing an origin resolve to different rate-control values. | Use the same values on every dataset and catalog that targets the origin. | +| `Components that target origin ... share one rate controller and must resolve to the same rate-control settings` | Datasets sharing an origin resolve to different rate-control values. The error names each differing parameter with both values. | Set each named parameter to the same value on every dataset and catalog that targets the origin. See [Components that share an origin](../../../reference/spicepod/runtime#components-that-share-an-origin). | | OAuth2 token refresh fails | `auth_token_url` not HTTPS, or wrong client credentials. | Verify the token endpoint URL; check `http_auth_client_id`/`secret` and required scopes. | | Request rejected: "OR across HTTP filter columns" | `WHERE request_path = '...' OR request_query = '...'`. | Split into separate refreshes or `UNION ALL`. | | Many partitions created from cross-product | Multiple `IN`-list filters multiplied into many requests. | Set `max_request_partitions` to cap; tighten filters. | diff --git a/website/docs/components/data-connectors/huggingface.md b/website/docs/components/data-connectors/huggingface.md index 555a4eaf2..671185c9a 100644 --- a/website/docs/components/data-connectors/huggingface.md +++ b/website/docs/components/data-connectors/huggingface.md @@ -98,6 +98,14 @@ CSV and TSV files are read by column position. Every CSV or TSV file a dataset s The `_location` metadata column, when enabled, holds the commit-pinned location of each row's file. For a public dataset read without `hf_token`, that is `hf://datasets//@/`, which DuckDB and `HfFileSystem` can read directly. A dataset read with a token, or through `hf_endpoint`, has its own host instead, `hf://datasets./...`, so no two datasets with different credentials share a client. The key comes from the endpoint and the dataset's name, never from the token. +## Retries + +A Hub request that cannot connect, times out, answers `408`, `500`, `502`, `503` or `504`, or whose response breaks off part way is retried with backoff, up to 5 attempts in total. A rate-limited request (`429`) waits for the reset the Hub names and is retried within the same 5 attempts, unless the reset is more than 30 seconds away. A file download that breaks off resumes from where it stopped. Retries apply while a dataset registers and while queries run, since a scan of a branch resolves it again. When every attempt fails, the error states how many were made: + +```text +Failed to reach the Hugging Face Hub at https://huggingface.co/ for dataset 'stanfordnlp/imdb' after 5 attempt(s): error decoding response body +``` + ## Performance - Parquet files are read in byte ranges, so a query reads only the row groups and columns it needs. diff --git a/website/docs/components/data-connectors/iceberg.md b/website/docs/components/data-connectors/iceberg.md index d46ad4294..6dbed4dbd 100644 --- a/website/docs/components/data-connectors/iceberg.md +++ b/website/docs/components/data-connectors/iceberg.md @@ -126,7 +126,7 @@ SELECT COUNT(*) FROM transactions; | `iceberg_gcs_service_path` | Custom endpoint URL for GCS (for emulators or custom endpoints). | | `iceberg_gcs_no_auth` | Set to `true` to allow anonymous access to GCS (for public buckets). | | `iceberg_metadata_path` | The Iceberg metadata file to read the table from, as a path relative to the table root in `from` (for example, `/metadata/00003-8f2c.metadata.json`) or as a full URL. When set, the table is read from exactly this file. A version hint file, such as `/metadata/version-hint.text`, is read on every query instead and names the metadata file to read. Applies only when `from` is a `file://`, `s3://`, `s3a://`, `gs://`, or `gcs://` table root. See [Pin a metadata file](#pin-a-metadata-file). | -| `metadata_path` | Deprecated. Use `iceberg_metadata_path`. Still accepted with its earlier meaning: the value is used as given, so it must be the full path to the metadata file, and a deprecation warning is logged. | +| `metadata_path` | Deprecated. Use `iceberg_metadata_path`. The value is used as given, so it must be the full path to the metadata file, and a deprecation warning is logged. | ## Authentication @@ -263,7 +263,7 @@ Spice finds the current metadata file on every query and every acceleration refr The current metadata file is found as follows: -1. If `metadata/version-hint.text` exists, Spice reads the metadata file it names. The hint holds a version number, such as `3`, or a file name without its suffix, such as `00003-8f2c`. For a version number, Spice looks for `v3` and then `3`, each with the metadata file suffixes listed below. +1. If `metadata/version-hint.text` exists, Spice reads the metadata file it names. The hint holds a version number, such as `3`, or a file name without its suffix, such as `00003-8f2c`. For a version number, Spice looks for `v3` and then `3`, each with the metadata file suffixes listed below. It then reads the newest consecutive version that exists after it, named the same way (`v4`, `v5`, and so on), because a Hadoop writer commits a new version before it updates the hint. 2. Otherwise, Spice lists `metadata/` and reads the file with the highest version number. The version is the leading digits of the file name, compared as numbers, so `v10` is newer than `v9`. Leading zeros are padding, and the rest of the name is ignored. If two files share the highest version, the one with the greater `last-updated-ms` is read. | File name | Written by | @@ -273,7 +273,7 @@ The current metadata file is found as follows: | `-.gz.metadata.json`, `v.gz.metadata.json` | The above, gzip-compressed | | `-.metadata.json.gz`, `v.metadata.json.gz` | The above, older gzip naming | -More generally, a file is read as a metadata file when its name is an optional `v`, the version number, and optionally `-` followed by any text, ending in one of the suffixes above. Other files are ignored. When Spice finds the file by listing, it logs a warning when the dataset loads, because without a catalog a commit that is in progress or that failed can be read as the current table: +More generally, a file is read as a metadata file when its name is an optional `v`, the version number, and optionally `-` followed by any text, ending in one of the suffixes above. Other files are ignored, including a file named only by a UUID, such as `12345678-abcd-4ef0-9a12-3456789abcde.metadata.json`: a Hadoop writer writes a new version under that name before it commits it as `v.metadata.json`. When Spice finds the file by listing, it logs a warning when the dataset loads, because without a catalog a commit that is in progress or that failed can be read as the current table: ```text Dataset 'taxis' has no 'metadata/version-hint.text', so each query reads the Iceberg table at 's3://my-bucket/warehouse/db/taxis' from the metadata file with the highest version number (now 's3://my-bucket/warehouse/db/taxis/metadata/00003-8f2c.metadata.json'). Without a catalog, a commit that is in progress or that failed can be read as the current table. To read a fixed snapshot, set `iceberg_metadata_path`. See: https://spiceai.org/docs/components/data-connectors/iceberg @@ -319,9 +319,9 @@ An Iceberg table read from its metadata file (`iceberg_metadata_path`) has no ca Writes kept in the acceleration with [`acceleration.write_mode: acceleration`](../../reference/spicepod/datasets#accelerationwrite_mode) never reach the table and are still accepted. -### Migrate from `metadata_path` +### Deprecated `metadata_path` -`iceberg_metadata_path` replaces `metadata_path`. The earlier name is still accepted, logs a deprecation warning, and keeps its earlier meaning: its value is used as given rather than resolved against `from`. To migrate, rename the parameter. A full URL works unchanged under the new name, and can be shortened to a path relative to `from`. If both are set, `iceberg_metadata_path` is used. When `from` is an object-storage or local-filesystem table root, a dataset that sets `metadata_path` with `access: read_write` now fails to load, as described above; such writes could not commit before this change. +`metadata_path` is deprecated in favor of `iceberg_metadata_path`. Spice accepts it and logs a deprecation warning. Its value is used as given rather than resolved against `from`, so it must be the full path to the metadata file. If both are set, `iceberg_metadata_path` is used. To switch, rename the parameter: a full URL works unchanged under the new name, and can be shortened to a path relative to `from`. When `from` is an object-storage or local-filesystem table root, a dataset that sets `metadata_path` with `access: read_write` fails to load, as described above. ## Write Support diff --git a/website/docs/components/data-connectors/sharepoint.md b/website/docs/components/data-connectors/sharepoint.md index 5b2420ba1..7fc8f8991 100644 --- a/website/docs/components/data-connectors/sharepoint.md +++ b/website/docs/components/data-connectors/sharepoint.md @@ -83,6 +83,8 @@ The SharePoint connector accepts two `from:` URL styles. Returns one row per drive item, optionally with the parsed `content` column. Use for document workflows over folders of PDF, PPTX, DOCX, XLSX, etc. +A folder in the listing is returned as a row too, with `NULL` `c_tag` and `content`. For an item that an application created rather than a user, `created_by_id` and `last_modified_by_id` can be `NULL`. + ```yaml from: 'sharepoint::/:' ``` diff --git a/website/docs/components/tools/mcp.md b/website/docs/components/tools/mcp.md index e71e37a90..83163d18f 100644 --- a/website/docs/components/tools/mcp.md +++ b/website/docs/components/tools/mcp.md @@ -213,12 +213,6 @@ tools: GITHUB_PERSONAL_ACCESS_TOKEN: ${secrets:GITHUB_PERSONAL_ACCESS_TOKEN} ``` -:::note - -In `v2.4.0-rc.1`, a stdio MCP server inherited the full `spiced` environment. A server that relied on that, for example to read a token, now needs the variable set in `env`. - -::: - ### `description` The `description` field provides a textual description of the tool. This description is passed to any language model that uses the tool. diff --git a/website/docs/features/caching/index.md b/website/docs/features/caching/index.md index 93ec99f42..b8c0aa2d4 100644 --- a/website/docs/features/caching/index.md +++ b/website/docs/features/caching/index.md @@ -79,11 +79,10 @@ The search results and embeddings caches name the shard count in their startup l Initialized search results cache; max size: 128.00 MiB, item ttl: 1s, shards: 16 ``` -With a non-zero [`stale_while_revalidate_ttl`](#serving-stale-after-an-acceleration-refresh), SQL -result invalidations mark entries stale without evicting them. Otherwise, a table invalidation walks -every shard to evict the entries that read the table, so its cost is proportional to the number of -cached entries. The walk runs on a blocking thread, not on the query runtime. -Search result invalidations always evict entries. +A table invalidation walks every shard to evict the entries that read the table, so its cost is +proportional to the number of cached entries. The walk runs on a blocking thread, not on the query +runtime. SQL results are invalidated only by a client write or a dataset reload or unload, not by an +acceleration refresh (see [Cached Results and Data Changes](#cached-results-and-data-changes)). ### Serving repeated lookups @@ -92,7 +91,7 @@ For a high-throughput lookup path: - Compare `eviction_policy: tiny_lfu` and `lfu` with the default `lru` using `results_cache_hit_ratio`. - Set `encoding: zstd` on `sql_results` when cached payloads are large. See [Choosing an `encoding`](#choosing-an-encoding). -When memory is tight, give `sql_results.max_size` room for the hot working set before shrinking the Cayenne [segment and footer caches](../components/data-accelerators/cayenne/performance#cache-tuning) below a useful set. A segment cache smaller than the segments a lookup reads mostly misses; the results cache can still answer the repeated query. After the change, read `results_cache_evictions` by `reason`: `size` is capacity pressure, `invalidated` is a refresh or DML write, `expired` is `item_ttl`. Pair that with `results_cache_hit_ratio`. +When memory is tight, give `sql_results.max_size` room for the hot working set before shrinking the Cayenne [segment and footer caches](../components/data-accelerators/cayenne/performance#cache-tuning) below a useful set. A segment cache smaller than the segments a lookup reads mostly misses; the results cache can still answer the repeated query. After the change, read `results_cache_evictions` by `reason`: `size` is capacity pressure, `invalidated` is a client write or a dataset reload or unload, `expired` is `item_ttl`. Pair that with `results_cache_hit_ratio`. ## `caching.sql_results` Parameters @@ -108,9 +107,9 @@ In addition to the common caching parameters, `sql_results` also supports additi ### Choosing a `cache_key_type` - **`plan` (Default):** Uses the query's logical plan as the cache key. This approach matches semantically equivalent queries, even if their SQL syntax differs. However, it requires query parsing, which introduces some overhead. -- **`sql`:** Uses the raw SQL string as the cache key. This method provides faster lookups but requires exact string matches. Queries with dynamic functions, such as `NOW()`, may produce unexpected results because the cache key changes with each execution. Use `sql` only when query results are predictable and consistent. +- **`sql`:** Uses the raw SQL string as the cache key. This method provides faster lookups but requires exact string matches. -Use `sql` for the lowest latency with identical queries that do not include dynamic functions. Use `plan` for greater flexibility and semantic matching of queries. +Use `sql` for the lowest latency with identical queries. Use `plan` for greater flexibility and semantic matching of queries. Under either key type, a query that calls a non-deterministic function, such as `now()` or `random()`, is not cached. See [Queries That Are Not Cached](#queries-that-are-not-cached). ## Choosing a `hashing_algorithm` @@ -143,6 +142,18 @@ That exclusion makes `max_size` an **entry budget, not a ceiling on cache memory Alert on both halves: `results_cache_size_bytes` is the figure `max_size` is enforced against, and `schema_interner_value_bytes` + `schema_interner_overhead_bytes` + `table_set_interner_value_bytes` + `table_set_interner_overhead_bytes` are the memory outside it. Total cache memory is the sum. +### Queries That Are Not Cached + +The SQL results cache stores only a result that a repeat of the same query returns again. Under either `cache_key_type`, a query is not cached when its plan, including any subquery: + +- Calls a function that is not `immutable`, such as `random()`, `uuid()`, or a [user-defined function](../functions/index.md#volatility) declared `stable` or `volatile` (the default). +- Calls a time function: `now()`, `current_timestamp`, `current_date`, `current_time`, `localtime`, `localtimestamp`, or `today`. +- Reads a table function whose rows can change between runs, such as a search table function, or a SQL or WASM table function not declared `immutable`. + +Such a query runs every time, and its response has no `Results-Cache-Status` header. A recursive CTE is cached. + +A query sent with a [custom cache key](#custom-cache-keys) is looked up by that key before it is planned, so these checks do not apply to the lookup: a result stored under the key is served even when the query calls a non-deterministic function. Use a custom key only for queries whose results do not change between runs. + ### Results That Cannot Be Cached An uncompressed (`encoding: none`) SQL results-cache entry must own the memory it holds. Some sources hand the runtime a result resting on memory they own themselves — a driver's result chunk imported over FFI, an Arrow Flight message body sliced out of a gRPC frame — and an entry over such a result would pin the producer's whole chunk while being billed only for the buffers it declares, so `max_size` could not bound it. @@ -270,7 +281,7 @@ The status header indicates the cache status: | `MISS` | The cache was checked, but the result was not found. | | `BYPASS` | The cache was bypassed for this query (e.g., when `cache-control: no-cache` is specified). | | `STALE` | A stale cache entry was served while the cache is being revalidated in the background (when `stale_while_revalidate_ttl` is set to a non-zero duration). | -| _header not present_ | The cache did not apply to this query (e.g., when caching is disabled or querying a system table). | +| _header not present_ | The cache did not apply to this query (e.g., when caching is disabled, when querying a system table, or when the query is [not cacheable](#queries-that-are-not-cached)). | The scope header indicates the cache namespace: @@ -340,13 +351,17 @@ You can control caching behavior for specific requests using HTTP headers. The ` The `stale_while_revalidate_ttl` parameter configures a grace period during which stale cache entries continue to be served while a background refresh occurs. This technique reduces latency for end users by serving cached data immediately, even after `item_ttl` expires, while the system fetches fresh data asynchronously. +A SQL result's age counts from when the query that produced it started, including any time the query waited to run. A result that is already older than `item_ttl + stale_while_revalidate_ttl` when its query finishes is not stored. + When `stale_while_revalidate_ttl` is set to a non-zero value: 1. Cache entries are served normally until `item_ttl` expires. 2. After `item_ttl` expires but before `item_ttl + stale_while_revalidate_ttl` expires, the stale entry is served immediately with a `STALE` cache status. -3. Simultaneously, a background task refreshes the cache entry. +3. Simultaneously, a background task refreshes the cache entry. Revalidation is single-flighted per key, so concurrent requests start one query and are all served the stale entry. 4. Once the background refresh completes, subsequent requests receive the fresh data with a `HIT` cache status. -5. After `item_ttl + stale_while_revalidate_ttl` expires, the entry is evicted and the next request results in a `MISS`. +5. After `item_ttl + stale_while_revalidate_ttl` expires, the entry is a miss, even while it is still in memory, and the next request runs the query. + +A failed revalidation leaves the previous entry in place, to be served stale until its age reaches `item_ttl + stale_while_revalidate_ttl`. `results_cache_swr_revalidations` is the only visible symptom of that failure. #### Example Configuration @@ -361,42 +376,25 @@ runtime: With this configuration: -- Fresh cache entries are served for 10 seconds after creation. -- Between 10-20 seconds after creation, stale entries are served while being refreshed in the background. -- After 20 seconds, the entry is evicted if not refreshed. +- A result is served fresh for 10 seconds after its query started. +- Between 10 and 20 seconds, it is served stale while a background query revalidates it. +- After 20 seconds, the next request runs the query, unless a revalidation has replaced the entry. This approach is particularly useful for queries that take significant time to execute, providing a better user experience by reducing perceived latency while keeping data reasonably fresh. -#### Serving Stale After an Acceleration Refresh - -A cached result is judged against **two independent clocks**, both evaluated on every hit. The first to say "not servable" wins: - -| Clock | Measured from | Fresh | Serve stale + revalidate | Miss | -| ---------------- | ---------------------------------------- | ------------------------------------ | ----------------------------------------- | ------------------------------- | -| **Age** | When the entry was stored | Up to `item_ttl` | `item_ttl` → `item_ttl + swr` | Past `item_ttl + swr` | -| **Invalidation** | The refresh or DML write that touched a table the result read | The change predates the entry's own read | change → change + `swr` | Past change + `swr` | +#### Cached Results and Data Changes -A dataset **reload** counts as a change on that clock: a hot reload, or any other re-registration of a dataset, invalidates the results cached from its previous contents — both when the reload starts and again once the new registration is in place, so a query that began mid-reload cannot store a result the clock would then accept. It invalidates the [logical plan cache](#logical-plan-cache) too. If the invalidation cannot be recorded the reload still completes, and the runtime warns that queries may be answered from the previous contents until they expire. +An acceleration refresh, a CDC change, or a retention pass does not invalidate cached SQL results. A result cached before a refresh is served as `HIT` until its age reaches `item_ttl`, and as `STALE` until `item_ttl + stale_while_revalidate_ttl`. Because entries are stored at different times, they also expire at different times, so the queries that replace them after a refresh are spread out rather than arriving at once. -Removing a dataset, for example by deleting it from a Spicepod the runtime watches, evicts every result cached from it, whatever `stale_while_revalidate_ttl` is set to, and drops the logical plan cache. A repeat of an earlier query then fails with `table '...' not found`, under either `cache_key_type`. +Set `item_ttl` to how long a result may be served after its query started. For results that follow each refresh, set `item_ttl` to the refresh interval or less. With the default `item_ttl` of `1s`, a cached result is served for at most about one second after a refresh. -With no stale-serving window — `stale_while_revalidate_ttl` unset, or set to `0s` — an acceleration refresh or a DML write **evicts** every dependent entry, so a workload polling accelerated datasets turns a whole population of cached results into simultaneous synchronous misses at each refresh. An explicit `0s` is read as no window rather than as one that closes immediately, since keeping entries resident for it would hold memory no lookup could ever serve from. +The following changes evict the cached results that read a table, whatever `item_ttl` and `stale_while_revalidate_ttl` are set to, so a client reads its own writes: -When `stale_while_revalidate_ttl` is set to a **non-zero** duration, the invalidation instead marks those entries stale and leaves them resident: +- **A client write:** DML such as `INSERT`, `UPDATE`, or `DELETE`, a Flight `DoPut`, a Flight SQL update, or a transaction. +- **A dataset reload:** a hot reload, or any other re-registration of a dataset, invalidates the results cached from its previous contents, both when the reload starts and again once the new registration is in place, so a query that began mid-reload cannot store a result from the previous contents. It invalidates the [logical plan cache](#logical-plan-cache) too. If the invalidation cannot be recorded, the reload still completes, and the runtime warns that queries may be answered from the previous contents until they expire. +- **A dataset unload:** removing a dataset, for example by deleting it from a Spicepod the runtime watches, evicts every result cached from it and drops the logical plan cache. A repeat of an earlier query then fails with `table '...' not found`, under either `cache_key_type`. -- **Inside the window** — the previous result is served with `results-cache-status: STALE`, and a background revalidation starts. Revalidation is single-flighted per key, so concurrent requests produce one query and all of them are served stale. Its result replaces the entry, whose read time is then after the refresh, so the entry returns to a plain `HIT`. -- **Past the window** — a miss, as before. -- **A failed revalidation invalidates nothing** — the previous result keeps being served until the window closes, then becomes a miss. `results_cache_swr_revalidations` is the only visible symptom of that failure. - -Nothing is served *as fresh* once a table it read has moved on — only as `STALE`. - -The same rule covers a table that changes while a query runs. The query still returns its result to the caller. With no stale-serving window, that result is not cached, so the next identical query runs again. With a non-zero `stale_while_revalidate_ttl`, the result is cached as stale: the next identical query is served with `STALE` and starts a revalidation, whose result is served as `HIT` unless the table changed again while it ran. A dataset that changes faster than its queries run, such as one with `refresh_mode: changes`, therefore still benefits from the cache. - -There is no new configuration parameter: `stale_while_revalidate_ttl` is the opt-in for both clocks. - -:::note[The window is anchored to the change, but capped by the entry's own age] -An entry is still dropped `item_ttl + stale_while_revalidate_ttl` after it was *stored*, whatever happened to the tables it read. A refresh landing late in an entry's life therefore leaves less than the full window — the effective window is the shorter of the two. This can only end stale-serving early, never extend it. -::: +A query that reads a table while one of these changes lands still returns its result to the caller, but the result is not served from the cache, so the next identical query runs again. A lookup that finds such an entry counts it as a miss and in `results_cache_stale_rejections`. :::warning[Conflict with Caching Accelerator SWR] When using a dataset with `refresh_mode: caching`, you cannot configure both the results cache's `stale_while_revalidate_ttl` and the caching accelerator's `caching_stale_while_revalidate_ttl` for the same dataset. These parameters control similar behavior at different layers. @@ -421,7 +419,7 @@ The following `Cache-Control` directives are supported: | ---------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | [`no-cache`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#no-cache) | Skips the cache for the current request but caches the results for future requests. | | [`min-fresh`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#min-fresh) | Specifies the minimum time (in seconds) that a cached response must remain fresh. For example, `min-fresh=60` requires the cached entry to be fresh for at least 60 more seconds. | -| [`max-stale`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#max-stale) | Indicates the client will accept a stale response. An optional value in seconds specifies the maximum staleness allowed. For example, `max-stale=30` accepts responses stale for up to 30 seconds. | +| [`max-stale`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#max-stale) | Indicates the client will accept a stale response. An optional value in seconds specifies the maximum staleness allowed. For example, `max-stale=30` accepts responses stale for up to 30 seconds. The cache never serves a SQL result older than `item_ttl + stale_while_revalidate_ttl`, so `max-stale` can narrow the stale-while-revalidate window but not widen it. A stale result is served with the `STALE` status and starts a background revalidation. | | [`only-if-cached`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#only-if-cached) | Returns only cached responses. If no cached response is available, returns an error instead of fetching fresh data. | #### HTTP Example @@ -606,29 +604,26 @@ Cache metrics can be monitored using the [Prometheus-compatible Metrics Endpoint | ------------- | ------------------------------------------------------------------------------ | | `size` | The cache exceeded `max_size` and reclaimed an entry. | | `expired` | The entry outlived `item_ttl`. | -| `invalidated` | A dataset refresh or a DML write dropped the entries that referenced a table. | +| `invalidated` | A client write, or a dataset reload or unload, dropped the entries that read a table. Search results are also dropped when a dataset they read refreshes. | + +`invalidated` is a separate label value so that an alert on cache pressure can watch `size` and `expired` alone. -On an accelerated dataset with a periodic refresh and no stale-serving window, `invalidated` is usually the dominant — often the only — reason, which is why it is a separate label value rather than folded into an unlabelled total: an alert on cache pressure should watch `size` and `expired`. With a non-zero `stale_while_revalidate_ttl` those refreshes mark entries stale instead of removing them, so they produce no `invalidated` evictions at all — watch `results_cache_table_invalidations` for them. +A SQL result that cannot be served to the request, such as an entry past `item_ttl + stale_while_revalidate_ttl` that is still in memory, or one older than the request's own `max-stale`, counts as a miss in `results_cache_misses` and `results_cache_hit_ratio`. Every cache counter is published at zero when the runtime starts, so a counter that has not yet fired still appears in a scrape as a zero series rather than being absent. -The SQL results cache additionally emits four counters covering [table invalidation](#serving-stale-after-an-acceleration-refresh): +The SQL results cache additionally emits three counters covering [invalidation and revalidation](#cached-results-and-data-changes): | Metric | Labels | Description | | -------------------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -| `results_cache_stale_rejections` | `reason` | Lookups that found an entry but refused to serve it because a table the result read had since been invalidated. Also counted in `results_cache_misses`, so the two together separate "nothing was cached" from "something was cached but had gone stale". | -| `results_cache_table_invalidations` | `mode` | Table invalidations applied to the cache. Counts invalidations, not the entries each one affected. | -| `results_cache_invalidation_stale_hits`| — | Results served from an entry an invalidation had marked stale, within the stale-while-revalidate window. | +| `results_cache_stale_rejections` | `reason` | Lookups that found an entry but refused to serve it because a client write, dataset reload, or unload changed a table the result read after its query started. Also counted in `results_cache_misses`. The only `reason` is `write_during_read`. | +| `results_cache_table_invalidations` | `mode` | Table invalidations applied to the cache by client writes and by dataset reloads and unloads. `mode` is always `evict`. Counts invalidations, not the entries each one affected. | | `results_cache_swr_revalidations` | `outcome` | Completed background revalidations. Any outcome other than `stored` leaves the previous entry in place to be served stale until it expires. | -`reason` on `results_cache_stale_rejections` is one of `no_window` (stale serving is disabled — `stale_while_revalidate_ttl` unset or `0s`), `window_expired` (the window had closed), or `fresh_required` (the lookup was made on a path that serves only fresh results, and so treats the entry as a miss). - -`mode` on `results_cache_table_invalidations` is `evict` when the dependent entries were removed, or `mark_stale` when they were left resident to be served stale. A `mark_stale` invalidation removes nothing, so it is invisible to `results_cache_evictions` — without this counter the switch between the two modes is indistinguishable from refreshes having stopped. - `outcome` on `results_cache_swr_revalidations` is `stored`, `query_failed`, `collect_failed`, `invalidated_mid_flight`, `transient_errors`, `unboundable`, `encode_failed`, or `put_failed`. `unboundable` means the revalidated result rested on memory its producer owns, so an entry over it could not have been bounded by `max_size`. :::note -These four counters are published at zero for the search-results and embeddings caches as well, but only the SQL results cache ever increments them. +These three counters are published at zero for the search-results and embeddings caches as well, but only the SQL results cache ever increments them. ::: The `*` prefix corresponds to the cache type: @@ -692,9 +687,9 @@ results_cache_requests 18 # HELP results_cache_size_bytes Size of the cache in bytes. # TYPE results_cache_size_bytes gauge results_cache_size_bytes 7776 -# HELP results_cache_stale_rejections Number of lookups that found an entry but refused to serve it because a table it read had since been invalidated. +# HELP results_cache_stale_rejections Number of lookups that found an entry but refused to serve it because a client write, dataset reload or unload changed a table it read after its query started. Reported with reason `write_during_read`. These are also counted as misses. # TYPE results_cache_stale_rejections counter -results_cache_stale_rejections 0 +results_cache_stale_rejections{reason="write_during_read"} 0 ``` ## Cookbook diff --git a/website/docs/features/data-acceleration/data-refresh.md b/website/docs/features/data-acceleration/data-refresh.md index 2513ec5ee..41bc98481 100644 --- a/website/docs/features/data-acceleration/data-refresh.md +++ b/website/docs/features/data-acceleration/data-refresh.md @@ -259,6 +259,8 @@ Connectors that reach their source only when the dataset is first read, such as A dataset with no existing acceleration to serve, such as one starting for the first time, is registered once its source is reached. Until then, its status is `Error`, queries fail with `table ... not found`, and `/v1/ready` returns `503`. Spice retries the source with a backoff that starts at about one second and grows to at most five minutes between attempts, with no limit on attempts, and loads the dataset when the source answers. Rejected credentials and TLS failures are configuration errors: Spice logs them as an error and does not retry. +The same applies when Spice cannot create the acceleration itself. A transient failure, such as a [PostgreSQL accelerator](../../components/data-accelerators/postgres) database that cannot be reached, is retried, and the dataset loads once the cause is resolved, without a restart. Acceleration settings that the engine rejects, such as Cayenne `partition_by` with `mode: memory` or a column type the engine cannot store, fail the dataset: Spice logs the error once and does not retry. After the setting is corrected, a [Spicepod reload](../../cli/reference/spiced) or a restart loads the dataset. + #### Readiness and Dataset Status While the Source Is Unavailable Query availability and source health are reported separately: a dataset can serve its acceleration while its status is `Error`. With the default runtime [`ready_state: on_load`](../../reference/spicepod/runtime#runtimeready_state), the dataset `ready_state` determines when `/v1/ready` returns `200`: @@ -531,8 +533,6 @@ Failed to register dataset 'user_events' (mysql): `on_zero_results: use_source` To resolve it, remove `on_zero_results: use_source`, or use a `retention_sql` or `retention_period` policy that can be evaluated as a filter on the source columns. -Spice v2.4.0-rc.1 and earlier releases do not apply the retention policy to the fallback query, so on those releases `on_zero_results: use_source` can return soft-deleted and expired rows from the source. - ## Refresh on Startup | Parameter | Value | diff --git a/website/docs/features/data-acceleration/partitioning.md b/website/docs/features/data-acceleration/partitioning.md index dcb4fe2e8..a1384623f 100644 --- a/website/docs/features/data-acceleration/partitioning.md +++ b/website/docs/features/data-acceleration/partitioning.md @@ -213,7 +213,11 @@ A `refresh_mode: full` refresh — and any other whole-table overwrite — repla Spice does not re-partition existing acceleration data. An Arrow acceleration lives in memory and is rebuilt from the source on every start, so a new `partition_by` takes effect on restart. A Cayenne acceleration in `mode: file` keeps its data and catalog on disk, so its stored layout must match `partition_by` when the dataset loads. -A file-mode Cayenne dataset fails to load when its stored data was written with a different partitioning than its current `partition_by`. This covers adding `partition_by` to unpartitioned data, removing it from partitioned data, and changing the partition column names. The runtime logs one error and does not retry. The error has this form, with the values in angle brackets filled in: +A change to the stored partitioning covers adding `partition_by` to unpartitioned data, removing it from partitioned data, and changing the partition column names. + +A file-mode Cayenne dataset with `refresh_mode: full` and `write_mode: write_through` (the default) is rebuilt from its source when its stored partitioning differs from `partition_by`: Spice drops the acceleration and reloads it with the new partitioning, because every full refresh rewrites every row. The rebuild waits until the source answers a read. While the source cannot be read, the dataset fails to load with an error that says to revert `partition_by` or to restart once the source can be read. See [Changing Acceleration Settings](../../components/data-accelerators/cayenne/index.md#changing-acceleration-settings). + +Any other file-mode Cayenne dataset fails to load when its stored data was written with a different partitioning than its current `partition_by`, because it can hold rows that a reload does not bring back. The runtime logs one error and does not retry. The error has this form, with the values in angle brackets filled in: ```text Failed to load dataset (cayenne): its acceleration data was written , but the dataset now sets . Cayenne does not re-partition existing acceleration data. To keep using the existing data, . To apply the new 'partition_by' instead, stop Spice, delete the acceleration data directory '' and the Cayenne metastore directory '', then start Spice to reload the dataset from the source. Other Cayenne datasets that use this metastore also reload from their sources. See: https://spiceai.org/docs/features/data-acceleration/partitioning @@ -227,7 +231,7 @@ To keep the existing data, restore the `partition_by` the data was written with, Deleting the metastore removes the catalog for every Cayenne dataset that shares it, and those datasets reload from their sources. Rows that exist only in Cayenne cannot be reloaded and are lost: rows in accelerator-only datasets ([`acceleration.write_mode: acceleration`](../../reference/spicepod/datasets.md#accelerationwrite_mode) or `sink` datasets), and write-back rows not yet written to the source. -To apply the new `partition_by`: +To apply the new `partition_by` to a dataset that is not rebuilt from its source: 1. Stop Spice with a graceful shutdown (`SIGTERM`). 2. Unless every dataset sharing the metastore can be fully reloaded from its source, back up the whole metastore directory, including every sidecar file next to `cayenne.db`, and every data directory it catalogs. Take the backup only after Spice has stopped. diff --git a/website/docs/features/data-acceleration/snapshots.md b/website/docs/features/data-acceleration/snapshots.md index 792898207..542009814 100644 --- a/website/docs/features/data-acceleration/snapshots.md +++ b/website/docs/features/data-acceleration/snapshots.md @@ -79,6 +79,27 @@ snapshots: s3_auth: iam_role # Defaults to iam_role for snapshots ``` +### Snapshots in the runtime state location + +When [`runtime.state`](../../reference/spicepod/runtime#runtimestate) is set and `snapshots.location` is not, snapshots are stored in the `snapshots/` folder of `runtime.state.location`, and the top-level `snapshots` block is optional: + +```yaml +runtime: + state: + location: s3://my-bucket/spice/ + +datasets: + - from: postgres:orders + name: orders + acceleration: + enabled: true + engine: cayenne + mode: file + snapshots: enabled +``` + +Snapshots of `orders` are written to `s3://my-bucket/spice/snapshots/`, with the same layout as any other snapshot location. A `snapshots.location` takes precedence over `runtime.state`. When `snapshots.params` is set, it replaces `runtime.state.params` for the snapshots folder; otherwise the snapshots use `runtime.state.params`. The other `snapshots` fields, such as `bootstrap_on_failure_behavior`, apply as usual. To [serve these snapshots](#serve-a-dataset-from-published-snapshots) from another instance, set the reader's `from` to the snapshots folder, such as `s3://my-bucket/spice/snapshots/`. + ### Supported storage backends | Backend | URL scheme | Environment variables | @@ -389,8 +410,6 @@ Snapshot datasets follow the same [metastore location](../../components/data-acc Each reload extracts the new snapshot into the Cayenne data directory beside the snapshot directories already there. Once the new snapshot is serving, Spice marks the directories it no longer references for deletion and deletes each one after a short grace period, once no query still reads it. A query that started before a reload keeps the directories it reads until it finishes, so long-running queries that span several reloads can keep several replaced copies on disk until they complete. A directory still in use when the background cleanup gives up is deleted on a later reload. When a restart restores the first snapshot, Spice applies the same cleanup to the unreferenced directories an earlier run left behind. Partitioned Cayenne tables, and Cayenne copies whose `cayenne_file_path` is an object-store (`s3://`) path, are not reclaimed this way. The [`cayenne_data_dir_snapshot_dirs`](../../components/data-accelerators/cayenne/deployment.md#storage-footprint-metrics) metric reports the number of snapshot directories on disk. -Earlier releases, including v2.4.0-rc.1, keep every replaced directory, so the data directory grows by one copy of the table per reload and a restart does not reclaim it. After an upgrade, the cleanup that follows the first snapshot restore deletes those leftover directories. - ### Configuration constraints The dataset is read-only. Spice rejects a configuration that contradicts reading snapshots, with an error that names the setting to remove: diff --git a/website/docs/features/distributed-query/index.md b/website/docs/features/distributed-query/index.md index 0bf504df2..07b7c47be 100644 --- a/website/docs/features/distributed-query/index.md +++ b/website/docs/features/distributed-query/index.md @@ -720,6 +720,8 @@ When a scheduler state location is configured, each async query's execution grap A job submitted by an authenticated principal is not resumed. The job records only an opaque owner ID, not an identity that table access and masking can be applied to, so resuming it would run the query without the submitter's permissions. Instead, the scheduler that detects the orphaned job marks it `FAILED` with the error code `SCHEDULER_UNAVAILABLE` and a message to resubmit the query. Jobs submitted without a principal are resumed. +If a job's scheduler stopped before it saved the job's execution graph, the scheduler that detects the orphaned job marks it `FAILED` with a message to resubmit the query. + This failover applies to async queries, which require a scheduler state location. Synchronous queries in flight on a scheduler that becomes unavailable are not resumed automatically; the client should retry them against another scheduler. Without a scheduler state location, job state is held in memory and a single-scheduler cluster behaves as before (no failover). ### S3 Configuration diff --git a/website/docs/features/large-language-models/decisions.md b/website/docs/features/large-language-models/decisions.md index daa690296..570ec661e 100644 --- a/website/docs/features/large-language-models/decisions.md +++ b/website/docs/features/large-language-models/decisions.md @@ -87,7 +87,7 @@ FROM tickets; ### Ask several questions with `ai_decide` -`ai_decide` asks a set of questions in one request and returns every answer. `questions` uses the same grammar as TypeSafe's API and Databricks' `ai_decide`. Each question has a `type` of `noul` (yes or no), `choice`, or `score`, and optional `instructions`. A `choice` maps 1 to 255 non-empty labels to descriptions in `criteria` (`null` when the label says it all), and a `score` lists 2 to 10 levels in `criteria`, lowest first. No question ID or label may repeat. +`ai_decide` asks a set of questions in one request and returns every answer. `questions` uses the same grammar as TypeSafe's API and Databricks' `ai_decide`. Each question has a `type` of `noul` (yes or no), `choice`, or `score`, and optional `instructions`. A `choice` maps 1 to 255 non-empty labels to descriptions in `criteria` (`null` when the label says it all), and a `score` lists 2 to 10 levels in `criteria`, lowest first. No question ID or label may repeat. A `choice` with one label is answered without a model call: the answer is that label, with probability 1 and confidence 1. ```sql SELECT id, ai_decide(body, '{ @@ -122,10 +122,6 @@ The model's `max_concurrency` and `requests_per_minute_limit` apply to every req ## HTTP: `POST /v1/decisions` -:::note[Migrating from v2.4.0-rc.1] -Spice v2.4.0-rc.1 served typed questions at `POST /v1/evaluate` and recorded them as `ai_evaluate` tasks. Later builds replace that endpoint with `POST /v1/decisions`, which takes OpenAI's Decisions API request shape, and record HTTP decisions as `ai_decision` tasks. `/v1/evaluate` is no longer served, so update callers to `/v1/decisions` and the request shape below. -::: - `POST /v1/decisions` takes and returns the request and response shapes of [OpenAI's Decisions API](https://developers.openai.com/api/reference/resources/decisions/methods/create). To call it from an OpenAI SDK, point the client's base URL at Spice and call `client.decisions.create(...)`. ```bash @@ -148,7 +144,7 @@ A response looks like this: ```json { - "model": "jev-1.13.0", + "model": "jev", "answers": [ { "type": "predicate", "name": "urgent", "probability": 0.9 }, { @@ -191,7 +187,7 @@ The request takes the following fields: - **`safety_identifier`** (optional): An end-user identifier of at most 128 characters, forwarded to OpenAI decision models. - **`reasoning_effort`** (optional): `none`, `minimal`, `low`, `medium`, `high`, or `xhigh`, passed to a chat model's completion request. When omitted, the model's own setting applies. This field is a Spice extension that OpenAI's Decisions API does not have. A decision model returns `400` with `code` `unsupported_parameter` for it. -Answers come back in question order, each with its question's `name`, or `null` when the question has none. An answer's `type` is `predicate`, `choice`, `score`, or `refusal` when the model declined to answer. `usage` is omitted when the model did not report it. +The response's `model` is the model name the request used. Answers come back in question order, each with its question's `name`, or `null` when the question has none. An answer's `type` is `predicate`, `choice`, `score`, or `refusal` when the model declined to answer. `usage` is omitted when the model did not report it. Any field outside OpenAI's schema, other than the `reasoning_effort` extension, returns `400`. Errors use OpenAI's envelope, `{"error": {"message", "type", "param", "code"}}`, with these status codes: @@ -205,7 +201,7 @@ Any field outside OpenAI's schema, other than the `reasoning_effort` extension, | `500` | The model could not answer, for example after a malformed reply and a failed retry. | | `503` | The model's provider is unavailable. | -Each request is recorded in [`runtime.task_history`](../../reference/task_history.md) as an `ai_decision` task. +Each request is recorded in [`runtime.task_history`](../../reference/task_history.md) as an `ai_decision` task. A request that fails records the cause in `error_message`, for example `` Evaluation of model 'nope' failed: model not found ``. A body that does not parse as a decision request, such as malformed JSON or one with an unknown field, records no task. ## How a chat model answers diff --git a/website/docs/features/large-language-models/mcp.md b/website/docs/features/large-language-models/mcp.md index c921c7a3d..dc4280391 100644 --- a/website/docs/features/large-language-models/mcp.md +++ b/website/docs/features/large-language-models/mcp.md @@ -211,12 +211,6 @@ tools: GITHUB_PERSONAL_ACCESS_TOKEN: ${secrets:GITHUB_PERSONAL_ACCESS_TOKEN} ``` -:::note - -In `v2.4.0-rc.1`, a stdio MCP server inherited the full `spiced` environment. A server that relied on that, for example to read a token, now needs the variable set in `env`. - -::: - For more details, see the [MCP Tools Reference](../../components/tools/mcp). ## Example: Spice as an MCP gateway for GitHub and Jira diff --git a/website/docs/features/large-language-models/parameter_overrides.md b/website/docs/features/large-language-models/parameter_overrides.md index 557a99676..152622bcf 100644 --- a/website/docs/features/large-language-models/parameter_overrides.md +++ b/website/docs/features/large-language-models/parameter_overrides.md @@ -90,6 +90,16 @@ Will be passed to the OpenAI API as: } ``` +### Text-to-SQL Reasoning Effort + +The [`/v1/nsql` API](../../api/HTTP/post-nsql) request body accepts `reasoning_effort`, which sets how much the model reasons before it writes SQL: `none`, `minimal`, `low`, `medium`, `high`, or `xhigh`. The requested level replaces the model's `reasoning_effort` default for every attempt, including the retry after generated SQL fails. When the request omits it, the model's default applies. Any other value returns `422`. + +```shell +curl -XPOST http://localhost:8090/v1/nsql \ + -H "Content-Type: application/json" \ + -d '{"query": "How many orders shipped last week?", "model": "my_model", "reasoning_effort": "low"}' +``` + ### System Prompt In addition to any system prompts provided in message dialogue, or added by model providers, Spice can configure an additional system prompt. diff --git a/website/docs/features/large-language-models/tools.md b/website/docs/features/large-language-models/tools.md index ece4c5cc7..a857a4ead 100644 --- a/website/docs/features/large-language-models/tools.md +++ b/website/docs/features/large-language-models/tools.md @@ -92,7 +92,7 @@ models: tool_recursion_limit: 3 ``` -On `/v1/responses`, the round after the last permitted tool round is sent to the model without Spice's tools, so the response ends with an answer rather than a tool call that Spice does not run. +On `/v1/responses`, streamed or not, a limit of N runs at most N rounds of Spice tool calls, and the round after the last permitted one is sent to the model without Spice's tools, so the response ends with an answer rather than a tool call that Spice does not run. The client receives one response for all rounds. Its `usage` covers every round, and its `id` is the last round's, so a request that continues with `previous_response_id` continues from the whole exchange. A streamed response has one `response.created` event and one run of `sequence_number`s across rounds. ### Tool Calls in Responses API Output diff --git a/website/docs/features/observability/index.md b/website/docs/features/observability/index.md index e9aec86e5..6fa600bac 100644 --- a/website/docs/features/observability/index.md +++ b/website/docs/features/observability/index.md @@ -254,7 +254,7 @@ Spice exposes the following metrics. The **Dimensions** column lists labels avai The cache counters (`results_cache_*`, `search_results_cache_*`, `embeddings_cache_*`) are published at zero when the runtime starts, so a counter that has not yet fired appears in a scrape as a zero series rather than being absent — an absent series indicates a scrape or exporter problem, not an idle cache. -All three families register the **same** instrument set, so every name below appears under all three prefixes in a scrape. The stale-serving and invalidation counters — `*_cache_stale_rejections`, `*_cache_table_invalidations`, `*_cache_swr_revalidations`, `*_cache_invalidation_stale_hits`, `*_cache_stale_swr_count` and `*_cache_swr_background_query_count` — are only ever incremented by the SQL results cache; their `search_results_cache_*` and `embeddings_cache_*` copies are exported at zero and stay there. Read them on the `results_cache_*` prefix only. +All three families register the **same** instrument set, so every name below appears under all three prefixes in a scrape. The stale-serving and invalidation counters — `*_cache_stale_rejections`, `*_cache_table_invalidations`, `*_cache_swr_revalidations`, `*_cache_stale_swr_count` and `*_cache_swr_background_query_count` — are only ever incremented by the SQL results cache; their `search_results_cache_*` and `embeddings_cache_*` copies are exported at zero and stay there. Read them on the `results_cache_*` prefix only. Component-specific instruments are documented with their component. The `cayenne_*` families — CDC apply, write and compaction, maintenance, storage footprint, metastore, primary-key index, and memory attribution — are listed in the [Cayenne deployment guide](../components/data-accelerators/cayenne/deployment#metrics). @@ -298,7 +298,6 @@ Component-specific instruments are documented with their component. The `cayenne | `embeddings_cache_evictions`

Number of entries removed from the cache, split by `reason`: `size` (over `max_size`), `expired` (past `item_ttl`), or `invalidated` (a refresh or DML write dropped the entries referencing a table). | _count_ | `reason` | | `embeddings_cache_hit_ratio`

Cache hit ratio (hits / total requests). | _gauge_ | — | | `embeddings_cache_hits`

Cache hit count. | _count_ | — | -| `embeddings_cache_invalidation_stale_hits`

Exported for this cache but never incremented — only the SQL results cache serves results from invalidation-marked entries. Stays at the published zero; read `results_cache_invalidation_stale_hits` instead. | _count_ | — | | `embeddings_cache_items_count`

Number of items currently in the cache. | _gauge_ | — | | `embeddings_cache_max_size_bytes`

Maximum allowed size of the cache in bytes. | _gauge_ | — | | `embeddings_cache_misses`

Cache miss count. | _count_ | — | @@ -351,20 +350,19 @@ Component-specific instruments are documented with their component. The `cayenne | `query_returned_rows`

Number of rows returned to query clients. | _histogram_ | _(request context)_ | | `query_spilled_bytes`

Number of spilled bytes produced by the query. | _count_ | _(request context)_ | | `query_spilled_rows`

Number of spilled rows produced by the query. | _count_ | _(request context)_ | -| `results_cache_evictions`

Number of entries removed from the cache, split by `reason`: `size` (over `max_size`), `expired` (past `item_ttl`), or `invalidated` (a refresh or DML write dropped the entries referencing a table). | _count_ | `reason` | +| `results_cache_evictions`

Number of entries removed from the cache, split by `reason`: `size` (over `max_size`), `expired` (past `item_ttl`), or `invalidated` (a client write, dataset reload, or unload dropped the entries that read a table). | _count_ | `reason` | | `results_cache_hit_ratio`

Cache hit ratio (hits / total requests). | _gauge_ | — | | `results_cache_hits`

Cache hit count. | _count_ | — | -| `results_cache_invalidation_stale_hits`

Number of results served from an entry a table invalidation had marked stale, within the configured stale-while-revalidate window. | _count_ | — | | `results_cache_items_count`

Number of items currently in the cache. | _gauge_ | — | | `results_cache_max_size_bytes`

Maximum allowed size of the cache in bytes. | _gauge_ | — | | `results_cache_misses`

Cache miss count. | _count_ | — | | `results_cache_requests`

Number of requests to get a key from the cache. | _count_ | — | | `results_cache_size_bytes`

Size of the cache in bytes. | _gauge_ | — | -| `results_cache_stale_rejections`

Number of lookups that found an entry but refused to serve it because a table the result read had since been invalidated. Split by `reason` into `no_window` (stale serving is disabled — `stale_while_revalidate_ttl` unset or `0s`), `window_expired` (the window had closed), or `fresh_required` (the lookup was made on a path that serves only fresh results). These are also counted as misses. | _count_ | `reason` | +| `results_cache_stale_rejections`

Number of lookups that found an entry but refused to serve it because a client write, dataset reload, or unload changed a table the result read after its query started. The only `reason` is `write_during_read`. These are also counted as misses. | _count_ | `reason` | | `results_cache_stale_swr_count`

Number of stale-while-revalidate background refreshes skipped due to existing in-flight revalidation. | _count_ | — | | `results_cache_swr_background_query_count`

Number of background queries triggered for stale-while-revalidate cache refreshes. | _count_ | — | | `results_cache_swr_revalidations`

Number of completed background stale-while-revalidate revalidations, split by `outcome` (`stored`, `query_failed`, `collect_failed`, `invalidated_mid_flight`, `transient_errors`, `unboundable`, `encode_failed`, `put_failed`). Any outcome other than `stored` leaves the previous entry in place to be served stale until it expires. | _count_ | `outcome` | -| `results_cache_table_invalidations`

Number of table invalidations applied to the cache, split by `mode` into `evict` (dependent entries removed) or `mark_stale` (left resident and marked stale, which `results_cache_evictions` cannot report). Counts invalidations, not the entries each one affected. | _count_ | `mode` | +| `results_cache_table_invalidations`

Number of table invalidations applied to the cache by client writes and by dataset reloads and unloads. `mode` is always `evict`. Counts invalidations, not the entries each one affected. | _count_ | `mode` | | `runtime_flight_server_started`

Indicates the runtime Flight server has started. | _count_ | — | | `runtime_http_server_started`

Indicates the runtime HTTP server has started. | _count_ | — | | `runtime_tls_reload_total`

Number of TLS certificate hot-reload attempts. | _count_ | `scope` (`public`, `cluster`), `result` (`ok`, `io_error`, `parse_error`) | @@ -385,7 +383,6 @@ Component-specific instruments are documented with their component. The `cayenne | `search_results_cache_evictions`

Number of entries removed from the cache, split by `reason`: `size` (over `max_size`), `expired` (past `item_ttl`), or `invalidated` (a refresh or DML write dropped the entries referencing a table). | _count_ | `reason` | | `search_results_cache_hit_ratio`

Cache hit ratio (hits / total requests). | _gauge_ | — | | `search_results_cache_hits`

Search cache hit count. | _count_ | — | -| `search_results_cache_invalidation_stale_hits`

Exported for this cache but never incremented — only the SQL results cache serves results from invalidation-marked entries. Stays at the published zero; read `results_cache_invalidation_stale_hits` instead. | _count_ | — | | `search_results_cache_items_count`

Number of items currently in the search cache. | _gauge_ | — | | `search_results_cache_max_size_bytes`

Maximum allowed size of the search cache in bytes. | _gauge_ | — | | `search_results_cache_misses`

Cache miss count. | _count_ | — | diff --git a/website/docs/features/views/index.md b/website/docs/features/views/index.md index 745b8f0e1..77acc2bd7 100644 --- a/website/docs/features/views/index.md +++ b/website/docs/features/views/index.md @@ -39,6 +39,16 @@ views: - `sql`: The SQL query defining the view, supporting joins, subqueries, and aggregations. - `acceleration`: Views can be [locally accelerated](../data-acceleration/index.md). +## Loading at Startup + +At startup, each view registers once the datasets and views its SQL reads have loaded, so a dataset whose load keeps failing holds back only the views that read it. Until it registers, the view's status is `Initializing`. A view still waiting after 30 seconds logs the tables it waits for, once: + +```text +View 'v_orders' is still waiting for 'orders' to load before it registers. +``` + +A view that reads a table that is not a dataset or view loading at startup, such as a [catalog](../../components/catalogs/index.md) table, waits for every startup dataset to load. + ## Limitations and Considerations - Views are read-only; insert, update, and delete operations are not supported. diff --git a/website/docs/reference/spicepod/runtime.md b/website/docs/reference/spicepod/runtime.md index 29f391ca7..1fd7ed780 100644 --- a/website/docs/reference/spicepod/runtime.md +++ b/website/docs/reference/spicepod/runtime.md @@ -219,18 +219,33 @@ A request that waits for rate-control capacity fails after `rate_control_acquire Timed out after 30s waiting for rate-control capacity for origin 'https://api.example.com:443' to admit the request. The configured rate limit could not free a slot in time. Increase the rate limit, raise `rate_control_acquire_timeout`, or lower request concurrency, then try again. See: https://spiceai.org/docs/reference/spicepod/runtime#http-rate-control ``` +Requests that wait for `max_concurrent_requests`, or for per-second and per-minute limits that are not [coordinated across instances](#limits-across-instances), are admitted in arrival order. The request at the front of the queue is charged the [adaptive](#adaptive-rate-control) admission in force when it reaches the front, so requests that queued while an origin was failing are admitted at the healthy rate once the origin recovers. + #### Components that share an origin -Every dataset and catalog that targets the same origin (`scheme://host:port`) shares one rate controller, so the limits apply to all of their requests together. They must resolve to the same `max_concurrent_requests`, `requests_per_second_limit`, `requests_per_minute_limit`, `rate_control_jitter_min`, `rate_control_jitter_max`, `rate_control_acquire_timeout`, `rate_control_failure_threshold`, and `rate_control_window` values. A component whose values differ from the first one registered for that origin fails to load: +Every dataset and catalog that targets the same origin (`scheme://host:port`) shares one rate controller, so the limits apply to all of their requests together. They must resolve to the same rate-control settings. Each parameter is compared as it resolves, so an unset `rate_control_window` matches an explicit `10s`, and `33.3%` matches `0.333`: + +- `max_concurrent_requests`, `requests_per_second_limit`, `requests_per_minute_limit`, `rate_control_jitter_min`, and `rate_control_jitter_max` are always compared. +- `rate_control_acquire_timeout` is compared when both components set a limit or a jitter. +- `rate_control_failure_threshold` and `rate_control_window` are compared when both components adapt: a component with any limit on a single instance, or one with `requests_per_second_limit` or `requests_per_minute_limit` under [cluster rate control](#limits-across-instances). + +A component that resolves differently from the components already targeting the origin fails to load. The error names each differing parameter with both values, and explains a value that a default produced: ```text -Multiple HTTP-based components target http://api.example.com:80 with different rate-control settings. Use the same max_concurrent_requests, requests_per_second_limit, requests_per_minute_limit, rate_control_jitter_min, rate_control_jitter_max, rate_control_acquire_timeout, rate_control_failure_threshold and rate_control_window values for components sharing an origin. +Components that target origin 'http://api.example.com:80' share one rate controller and must resolve to the same rate-control settings, but this one differs from those already targeting it: `rate_control_window` is 1s here and 10s there. Set `rate_control_window` to matching values on every component that targets this origin. See: https://spiceai.org/docs/components/data-connectors/https/deployment#rate-control ``` #### Limits across instances In open-source builds, each Spice instance keeps its rate-control state in memory and enforces the configured limits on its own. In Spice.ai Enterprise, instances that share a [`runtime.state`](#runtimestate) location coordinate `requests_per_second_limit` and `requests_per_minute_limit` through that location, so `requests_per_second_limit: 20` means about 20 requests per second across all instances. Adaptive rate control then derives the same admission on every instance from the shared outcomes, and `rate_control_window` defaults to [`runtime.source_rate_control.refresh_interval`](#runtimesource_rate_control). `max_concurrent_requests` stays local to each instance. +Instances that set different `requests_per_second_limit` or `requests_per_minute_limit` values for one origin, such as during a rolling deployment that changes a limit, are held together to the lowest value that a running instance sets. Each instance logs a warning when the values start to differ, and a notice once every running instance sets the same value, including when the instances with other values stop: + +```text +WARN runtime_rate_control::leased: Instances sharing cluster rate control for origin 'https://api.example.com:443' set `requests_per_second_limit` to different values (this instance: 20; other running instances: 10), so the cluster is held to the lowest value, 10, until every running instance sets the same one. Set the same `requests_per_second_limit` on every instance that shares `runtime.state.location`. See: https://spiceai.org/docs/reference/spicepod/runtime#runtimesource_rate_control +INFO runtime_rate_control::leased: Every running instance sharing cluster rate control for origin 'https://api.example.com:443' now sets `requests_per_second_limit` to 20, so the cluster is held to 20. +``` + ### Spatial SQL Functions (opt-in) PostGIS-style spatial `ST_*` SQL functions (via [`geodatafusion`](https://github.com/datafusion-contrib/geodatafusion)) can be optionally registered with the SQL engine. @@ -319,11 +334,11 @@ Invalid `runtime.adaptive_tuning` value 'true': expected `enabled` or `disabled` Setting `adaptive_tuning` under `runtime.params` has no effect; it must be set directly under `runtime`. The adaptive controller runs on the background compaction tick, so a dataset with `cayenne_compaction_background_interval_ms: 0` uses static tuning and logs a warning. See [Self-Tuning](../../components/data-accelerators/cayenne/performance.md#self-tuning) for how both modes work. -### Migrating from `cayenne_tuning` and `cayenne_goal_*` {#migrate-from-cayenne-tuning} +### Unsupported tuning parameters {#unsupported-tuning-parameters} -Earlier releases, including v2.4.0-rc.1, configured adaptive tuning with the `cayenne_tuning` and `cayenne_goal_*` parameters on each dataset or catalog, and with `cayenne_goal_*` under `runtime.params`. These names are no longer read. Spice logs one startup warning for each old name still in use, naming its replacement, and does not apply the value. The warning covers each name with or without the `cayenne_` prefix. +Spice does not read the `cayenne_tuning` and `cayenne_goal_*` parameters, on a dataset, on a catalog, or under `runtime.params`. For each one set, with or without the `cayenne_` prefix, Spice logs one startup warning that names the setting to use instead, and does not apply the value. -| Old setting | Replacement | +| Parameter | Use instead | | --------------------------------------------------------------- | ---------------------------------------------------------------- | | Dataset or catalog `cayenne_tuning: adaptive` | `runtime.adaptive_tuning: enabled` | | Dataset or catalog `cayenne_tuning: auto` | `runtime.adaptive_tuning: disabled`, or omit it | @@ -333,7 +348,7 @@ Earlier releases, including v2.4.0-rc.1, configured adaptive tuning with the `ca | `cayenne_goal_qph` | `runtime.params.target_qph` | | Dataset `cayenne_goal_convergence_window` | `runtime.params.target_convergence_window` | -Adaptive tuning and its targets are now runtime-wide, so per-dataset overrides are no longer supported. Only `runtime.adaptive_tuning` selects the tuning mode. A Spicepod that relies on `cayenne_tuning: adaptive` runs with static tuning until `runtime.adaptive_tuning: enabled` is set. A Spicepod that already sets `runtime.adaptive_tuning: enabled` but still carries an old `cayenne_goal_*` key runs adaptive tuning, and only that old target is ignored. +Adaptive tuning and its targets are runtime-wide and cannot be set per dataset. Only `runtime.adaptive_tuning` selects the tuning mode, so a Spicepod with `cayenne_tuning: adaptive` runs with static tuning unless `runtime.adaptive_tuning: enabled` is set. With `runtime.adaptive_tuning: enabled`, a `cayenne_goal_*` key does not stop adaptive tuning; only that target is not applied. ## `runtime.source_rate_control` @@ -1046,7 +1061,7 @@ runtime: Each entry can be a bare hostname (`example.com`), a host-port pair (`example.com:8090`), or a full origin URL (`https://example.com`). -Only `["*"]` disables the check. An empty list (`allowed_hosts: []`) uses the defaults. In `v2.4.0-rc.1`, an empty list disabled host checking; set `allowed_hosts: ["*"]` to keep that behavior. +Only `["*"]` disables the check. An empty list (`allowed_hosts: []`) uses the defaults. ## `runtime.ready_state` @@ -1112,36 +1127,37 @@ The following features store their state under `runtime.state` when their own se | [SQL results cache warmup](../../features/caching#warming-the-cache-after-a-restart) | `runtime.caching.sql_results.warmup` is `on_first_refresh`. Without `runtime.state`, recorded query plans are written to `.spice/data/results_cache_warmup.json`. | | [Cluster scheduler](#runtimescheduler) | `runtime.scheduler.state_location` is not set. The scheduler's other settings still apply. | | [HTTP rate control](#limits-across-instances) | Always, in a Spice.ai Enterprise build: instances that share the location coordinate per-second and per-minute limits for every origin that sets one. Open-source builds keep rate-control state in memory. Rate control has no location of its own. | +| [Acceleration snapshots](../../features/data-acceleration/snapshots#snapshots-in-the-runtime-state-location) | A dataset sets `acceleration.snapshots` and the top-level `snapshots.location` is not set. `snapshots.params`, when set, replace `runtime.state.params` for snapshots. | A location set in a feature's own section takes precedence over `runtime.state`. Changing `runtime.state` requires a restart. ### Runtime state layout -Each feature writes under its own folder below the `runtime.state` location's path: the cluster scheduler under `cluster/`, HTTP rate control under `rate-control/`, and SQL results cache warmup under `results-cache/`. For `location: s3://my-bucket/spice-state`, the scheduler writes `spice-state/cluster/cluster.json` and warmup writes `spice-state/results-cache/results_cache_warmup.json`. The location's path is kept for every scheme, including `abfs://` and `abfss://`. +Each feature writes under its own folder below the `runtime.state` location's path: the cluster scheduler under `cluster/`, HTTP rate control under `rate-control/`, SQL results cache warmup under `results-cache/`, and acceleration snapshots under `snapshots/`. For `location: s3://my-bucket/spice-state`, the scheduler writes `spice-state/cluster/cluster.json` and warmup writes `spice-state/results-cache/results_cache_warmup.json`. The location's path is kept for every scheme, including `abfs://` and `abfss://`. The [startup check](#runtime-state-startup-check) keeps its files under `_spice/`. A location set in a feature's own section is used as given, without a feature folder. With `runtime.scheduler.state_location`, the scheduler writes `cluster.json` and its other state at the root of that location. For an `abfs://` or `abfss://` `state_location`, that root is the container root, and the URL's path is ignored. -:::warning[Migrating from v2.4.0-rc.1] +### Runtime state startup check -In v2.4.0-rc.1, every feature that used `runtime.state` wrote at the root of the location, and `abfs://` and `abfss://` locations wrote at the container root. Later versions do not read state at those paths. To keep it, stop every rc.1 instance that shares the location, move each feature's objects from the old path into that feature's folder, and upgrade all of those instances before restarting them, so that no instance keeps writing at the old path or reads a different layout than the others: +At startup, an instance with `runtime.state` checks the location before it writes state there. It reads `_spice/format.json`, which records the version of the state layout, and probes the store with conditional writes under `_spice/`. When `format.json` is missing, the instance creates it with `{"format-version":1}`. A check that passes logs one line naming the features that keep state in the location: -| Feature | Objects at the old path | Move into | -| ------- | ----------------------- | --------- | -| Cluster scheduler | `cluster.json`, `heartbeats/`, `jobs/`, and `scheduler/` | `cluster/` | -| HTTP rate control | One folder per spicepod, with a name derived from the spicepod's `name` (for example, `my_app/` for `name: my app`). To find it, list the old path for objects named `-<16 hex digits>.json`. | `rate-control/` | -| SQL results cache warmup | `results_cache_warmup.json` | `results-cache/` | +```text +Shared state location 's3://my-bucket/spice-state/' enforces conditional writes and holds state for source rate control and acceleration snapshots. +``` -For example, `spice-state/cluster.json` moves to `spice-state/cluster/cluster.json`, and `spice-state/my_app/` moves to `spice-state/rate-control/my_app/`. +The instance needs read and write access to the location. Until the check passes, the instance is not ready (`/v1/ready` returns `503`), writes of cluster scheduler, rate-control, and results cache warmup state wait, and each retry logs a warning with the cause. Spice retries with a backoff and no limit on attempts, so a missing bucket or missing write permission can be fixed without a restart, and the instance becomes ready once the check passes. With [`runtime.ready_state: on_registration`](#runtimeready_state), readiness does not wait for the check. -Move the rate-control objects first, one spicepod folder at a time, and move only the objects named `-<16 hex digits>.json` in that folder. A spicepod name can match another folder in the table, such as `heartbeats`, `jobs`, `scheduler`, `cluster`, `rate-control`, or `results-cache`, and moving whole folders would then mix rate-control objects with scheduler objects. Move the scheduler and warmup objects after that. +A store that does not enforce conditional writes, or a `format.json` that is invalid or records a newer format version than the running Spice supports, stops startup: Spice logs the error and exits with code 1. For example: -To keep the scheduler's previous layout instead of moving its objects, set `runtime.scheduler.state_location` to the old location. A scheduler with its own `state_location` does not use `runtime.state.params`, so also copy any parameters the location needs, such as credentials or an endpoint, into `runtime.scheduler.params`. Rate control and warmup have no location of their own, so their objects must be moved. Otherwise, the scheduler starts with fresh cluster state, rate control starts with no shared usage, and warmup records new query shapes. +```text +Shared state location 's3://my-bucket/spice-state/' has format version 2, and this version of Spice supports up to version 1. Upgrade Spice to a version that supports state format version 2. See: https://spiceai.org/docs/reference/spicepod/runtime#runtimestate +``` -::: +Acceleration snapshots do not wait for this check; they use the snapshot location's own [conditional-write probe](../../features/data-acceleration/snapshots#conditional-writes-on-the-snapshot-location). ### State location parameters -These rules apply to `runtime.state.params`, and to the `params` of a feature that sets its own state location, such as [`runtime.scheduler`](#runtimescheduler). A [snapshot location](../../features/data-acceleration/snapshots#configure-snapshot-storage) is configured separately, under `snapshots.params`. +These rules apply to `runtime.state.params`, and to the `params` of a feature that sets its own state location, such as [`runtime.scheduler`](#runtimescheduler). A [snapshot location](../../features/data-acceleration/snapshots#configure-snapshot-storage) takes the parameters described on the snapshots page, from `snapshots.params`, or from `runtime.state.params` when the snapshots are stored in the `runtime.state` location and `snapshots.params` is not set. An `s3://` location takes `s3_region`, `s3_endpoint`, `s3_auth`, `s3_key`, `s3_secret`, `s3_session_token`, `client_timeout`, and `allow_http`. `s3_auth` is `iam_role` (the default) or `key`. With `s3_auth: key`, both `s3_key` and `s3_secret` must be set. A location that sets `s3_auth: key` without both keys fails instead of connecting with the credentials from the environment, and the error reads: diff --git a/website/docs/reference/sql/prepared_statements.md b/website/docs/reference/sql/prepared_statements.md index 53e0f4bbf..77cb31770 100644 --- a/website/docs/reference/sql/prepared_statements.md +++ b/website/docs/reference/sql/prepared_statements.md @@ -45,6 +45,8 @@ EXECUTE greater_than(20, 23.3); A prepared statement belongs to the session that created it. A Flight SQL client starts a session with a Flight `Handshake` call. The runtime returns a session ID in the response and in the `x-session-id` response header. The client then sends that ID in the `x-session-id` header on each later request. Sessions expire after one hour of inactivity. +When [authentication](../../api/auth) is enabled, the runtime binds a request to a session only after the request authenticates. A session that a request creates by sending a new session ID belongs to that request's principal, so a request from another principal that sends the same ID cannot use its prepared statements. + A request that carries no session ID, including every HTTP [`/v1/sql`](../../api/HTTP/post-sql) request, runs in a new context that does not keep the statement. Running `PREPARE` and `EXECUTE` as two separate requests without a session fails on the `EXECUTE`: ```text diff --git a/website/docs/reference/sql/search.md b/website/docs/reference/sql/search.md index 18896d3d7..ee978cd1a 100644 --- a/website/docs/reference/sql/search.md +++ b/website/docs/reference/sql/search.md @@ -45,7 +45,7 @@ LIMIT 5; - `table`: Dataset name (required) - `query`: Search text, or an array of strings for [multi-query](#multi-query-late-interaction-form) search (required) - `column`: Column name (optional if only one embedding column; required when the table has multiple embedded columns) -- `limit`: Maximum results (optional). When omitted, the engine-defined maximum is used. +- `limit`: Maximum results (optional). The search returns the `limit` rows with the highest relevance scores, on scalar, chunked, and multi-vector columns alike. When omitted, the engine-defined maximum is used. - `include_score`: Include relevance scores (optional, default `TRUE`) - `distance_metric`: Similarity metric used to rank candidate vectors (optional, named argument). Supported values: `'cosine'` (default) and `'l2'` (negated Euclidean distance). `'dot'` is parsed but not yet wired through the scan path. - `rank_weight`: Per-query ranking weight (optional, named argument). Only meaningful when `vector_search` is passed as a subquery to [`rrf`](#reciprocal-rank-fusion-rrf). @@ -171,6 +171,8 @@ LIMIT 10; Note that `rank_weight` is specified as the last argument to either a `text_search` or `vector_search` UDTF call (as shown above). All other arguments can be specified in any order after the search calls (within an `rrf` invocation). +A nested search call keeps its other named arguments, such as `limit` or `distance_metric`, and applies them as it does when it runs alone. For example, `rrf(text_search(docs, 'coffee', limit => 5), vector_search(docs, 'coffee', limit => 5))` fuses at most 10 rows. `include_score => false` on a nested call fails the query, because `rrf` ranks on each call's score. + | Parameter | Type | Required | Description | | ------------------- | ---------------- | -------- | -------------------------------------------------------------------------------------------------------------------------------------------- | | `query_1` | Search UDTF call | Yes | First search query (e.g., `vector_search`, `text_search`) | diff --git a/website/docs/troubleshooting/index.md b/website/docs/troubleshooting/index.md index c01e32cee..991cf7bab 100644 --- a/website/docs/troubleshooting/index.md +++ b/website/docs/troubleshooting/index.md @@ -80,7 +80,7 @@ SPICED_LOG='runtime::datafusion::query=debug,info' spice run When the failure is known before the HTTP response starts, `/v1/sql` returns the error text as the body. An execution error such as divide by zero is HTTP 400. A timeout is HTTP 504. The body names the query and says to increase `runtime.query.timeout` or optimize the query. If rows have already started streaming, the status stays 200 and the stream ends with the error — the same behavior [`runtime.query.timeout`](../reference/spicepod/runtime.md#runtimequerytimeout) describes. -Flight and Flight SQL carry the same text on the gRPC status. A timeout is `DEADLINE_EXCEEDED`. A JDBC client, which talks to Spice over Flight SQL, reads it from `SQLException.getMessage()`. +Flight and Flight SQL carry the same text on the gRPC status. A query that fails on the values it computes, such as a divide by zero, a failed cast, or an arithmetic overflow, or on an HTTP origin's 4xx answer, has the status code `INVALID_ARGUMENT`. A timeout is `DEADLINE_EXCEEDED`. A JDBC client, which talks to Spice over Flight SQL, reads it from `SQLException.getMessage()`. [`runtime.task_history`](../reference/task_history.md) keeps the failed query and its `error_message` in memory for the retention period (8 hours by default). Client applications should log the error response so the text is still available when task history is disabled or the retention window has passed. diff --git a/website/public/openapi.json b/website/public/openapi.json index b3dbff11f..d634cc1b8 100644 --- a/website/public/openapi.json +++ b/website/public/openapi.json @@ -163,6 +163,9 @@ } } } + }, + "400": { + "description": "The specified model is a decision model; use POST /v1/decisions" } } } @@ -730,12 +733,26 @@ "tags": [ "Iceberg" ], - "summary": "Check if a namespace exists.", - "description": "This endpoint returns a 200 OK response if the namespace exists, otherwise it returns a 404 Not Found response.", + "summary": "Load an Iceberg namespace", + "description": "Returns the namespace if it exists. Spice does not store namespace properties, so `properties` is `null`.", "operationId": "get_namespace", "responses": { "200": { - "description": "Namespace exists" + "description": "Namespace exists", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetNamespaceResponse" + }, + "example": { + "namespace": [ + "spice", + "public" + ], + "properties": null + } + } + } }, "400": { "description": "Invalid namespace format" @@ -817,8 +834,8 @@ "tags": [ "Iceberg" ], - "summary": "Get a table.", - "description": "This endpoint returns the table if it exists, otherwise it returns a 404 Not Found response.", + "summary": "Load a table.", + "description": "A table Spice reads unchanged from an Iceberg table (a federated `iceberg:`\nor `glue:` dataset, a table in an Iceberg or Glue catalog, or an Iceberg DDL\ntable) is returned as that Iceberg table: its current metadata and metadata\nlocation, loaded from its catalog on every request, so an Iceberg client\nreads the snapshot Spice's next query reads. A column added to the table\noutside Spice reaches the client at once, while Spice keeps the columns the\ntable had when it was registered until it is reloaded. Any other table\n(accelerated, with columns Spice computes such as embeddings, a view, or a\nsource that is not Iceberg) is refused with `400`, naming the reason: query\nit with SQL through Spice instead.", "operationId": "get_table", "parameters": [ { @@ -842,7 +859,7 @@ ], "responses": { "200": { - "description": "Table exists", + "description": "The Iceberg table Spice reads the table from", "content": { "application/json": { "schema": { @@ -851,11 +868,25 @@ } } }, - "404": { - "description": "Table does not exist" + "400": { + "description": "The table cannot be read as an Iceberg table", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IcebergResponseError" + }, + "example": { + "error": { + "message": "Failed to load table 'spice.public.orders' as an Iceberg table: it is accelerated, so Spice answers queries from its acceleration rather than from an Iceberg table that Iceberg clients can read directly. Query it with SQL through Spice instead, over HTTP (`/v1/sql`) or Arrow Flight SQL. See: https://spiceai.org/docs/api/HTTP/get-table", + "type": "BadRequestException", + "code": 400 + } + } + } + } }, - "500": { - "description": "An internal server error occurred while getting the table", + "404": { + "description": "Table does not exist", "content": { "application/json": { "schema": { @@ -863,13 +894,23 @@ }, "example": { "error": { - "message": "Request failed. An internal server error occurred while getting the table.", - "r#type": "InternalServerError", - "code": 500 + "message": "Table 'spice.public.orders' does not exist", + "type": "NoSuchTableException", + "code": 404 } } } } + }, + "503": { + "description": "The table's Iceberg catalog could not be reached", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/IcebergResponseError" + } + } + } } } }, @@ -1715,6 +1756,14 @@ "responses": { "200": { "description": "SQL query executed successfully", + "headers": { + "Server-Timing": { + "schema": { + "type": "string" + }, + "description": "The time the server spent on the query, in milliseconds: `total;dur=` (W3C Server-Timing). Sent on every response whose body is complete before its head is sent — every format except the default streamed `application/json`, and every error. A streamed `application/json` body is not complete until it ends, so it sends the field as a trailer instead (declared by `Trailer: Server-Timing`) when the request accepts trailers: HTTP/2, or `TE: trailers` on HTTP/1.1." + } + }, "content": { "application/json": { "schema": { @@ -2104,6 +2153,59 @@ } } } + }, + "/v1/decisions": { + "post": { + "tags": [ + "AI" + ], + "summary": "Create a decision", + "description": "Answers typed questions about `input`, compatible with `OpenAI`'s Decisions API: a\n`predicate` returns the probability a statement is true, a `choice` returns the\nmost probable of its `choices` with the distribution and a confidence, and a\n`score` returns the probability-weighted 0-based index of its `levels`. Answers come\nback in question order with each question's `name`. `model` names any model in the\nSpicepod: a decision model such as `TypeSafe` Jev, whose probabilities are\ncalibrated, or a chat model, whose probabilities are its own estimates.", + "operationId": "post_decisions", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DecisionRequest" + } + } + }, + "required": true + }, + "responses": { + "200": { + "description": "The answers, in question order", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DecisionResponse" + } + } + } + }, + "400": { + "description": "Invalid request, including unknown fields, image inputs, and `reasoning_effort` for a decision model" + }, + "401": { + "description": "The model provider rejected the credentials" + }, + "403": { + "description": "The model provider denied access" + }, + "404": { + "description": "No model with this name" + }, + "429": { + "description": "Rate limited" + }, + "500": { + "description": "The model could not answer" + }, + "503": { + "description": "The model provider is unavailable" + } + } + } } }, "components": { @@ -2214,7 +2316,8 @@ ], "description": "A path to a file." } - ] + ], + "description": "An annotation that applies to a span of output text." }, "ApplyPatchCallOutputStatus": { "type": "string", @@ -2754,15 +2857,13 @@ }, "ChatCompletionAllowedToolsChoice": { "type": "object", + "description": "`{\"type\": \"allowed_tools\", \"allowed_tools\": {\"mode\": ..., \"tools\": [...]}}`: one mode over\none tool list, as the Chat Completions API defines it.", "required": [ "allowed_tools" ], "properties": { "allowed_tools": { - "type": "array", - "items": { - "$ref": "#/components/schemas/ChatCompletionAllowedTools" - } + "$ref": "#/components/schemas/ChatCompletionAllowedTools" } } }, @@ -2779,7 +2880,7 @@ }, "voice": { "$ref": "#/components/schemas/ChatCompletionAudioVoice", - "description": "The voice the model uses to respond. Supported voices are\n`alloy`, `ash`, `ballad`, `coral`, `echo`, `fable`, `nova`, `onyx`, `sage`, and `shimmer`." + "description": "The voice the model uses to respond. Supported built-in voices are `alloy`, `ash`,\n`ballad`, `coral`, `echo`, `fable`, `nova`, `onyx`, `sage`, `shimmer`, `marin`, and `cedar`." } } }, @@ -4019,6 +4120,16 @@ "$ref": "#/components/schemas/ClickButtonType", "description": "Indicates which mouse button was pressed during the click. One of `left`,\n`right`, `wheel`, `back`, or `forward`." }, + "keys": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "description": "The keys being held while clicking." + }, "x": { "type": "integer", "format": "int32", @@ -4248,11 +4359,11 @@ "string", "null" ], - "description": "Created by model/user identifier." + "description": "The identifier of the actor that created the item." }, "encrypted_content": { "type": "string", - "description": "The encrypted content." + "description": "The encrypted content that was produced by compaction." }, "id": { "type": "string", @@ -4269,7 +4380,7 @@ "properties": { "encrypted_content": { "type": "string", - "description": "The encrypted content." + "description": "The encrypted content of the compaction summary." }, "id": { "type": [ @@ -4528,7 +4639,7 @@ { "allOf": [ { - "$ref": "#/components/schemas/Drag", + "$ref": "#/components/schemas/DragParam", "description": "A drag action." }, { @@ -4574,7 +4685,7 @@ { "allOf": [ { - "$ref": "#/components/schemas/Move", + "$ref": "#/components/schemas/MoveParam", "description": "A mouse move action." }, { @@ -4612,7 +4723,7 @@ { "allOf": [ { - "$ref": "#/components/schemas/Scroll", + "$ref": "#/components/schemas/ScrollParam", "description": "A scroll action." }, { @@ -4635,7 +4746,7 @@ { "allOf": [ { - "$ref": "#/components/schemas/Type", + "$ref": "#/components/schemas/TypeParam", "description": "An action to type in text." }, { @@ -4791,7 +4902,6 @@ "type": "object", "description": "Output from a computer tool call.", "required": [ - "action", "call_id", "id", "pending_safety_checks", @@ -4799,7 +4909,24 @@ ], "properties": { "action": { - "$ref": "#/components/schemas/ComputerAction" + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/ComputerAction" + } + ] + }, + "actions": { + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/ComputerAction" + }, + "description": "Flattened batched actions for `computer_use`. Each action includes a\n`type` discriminator and action-specific fields." }, "call_id": { "type": "string", @@ -4908,13 +5035,14 @@ }, "Conversation": { "type": "object", + "description": "The conversation that this response belonged to. Input items and output items from this\nresponse were automatically added to this conversation.", "required": [ "id" ], "properties": { "id": { "type": "string", - "description": "The unique ID of the conversation." + "description": "The unique ID of the conversation that this response was associated with." } } }, @@ -5211,7 +5339,7 @@ "null" ], "format": "int32", - "description": "An integer between 0 and 20 specifying the number of most likely tokens to\nreturn at each token position, each with an associated log probability.\n`logprobs` must be set to `true` if this parameter is used.", + "description": "An integer between 0 and 20 specifying the number of most likely tokens to\nreturn at each token position, each with an associated log probability.\nIn some cases, the number of returned tokens may be fewer than requested.\n`logprobs` must be set to `true` if this parameter is used.", "minimum": 0 }, "top_p": { @@ -5296,7 +5424,7 @@ "type": "null" }, { - "$ref": "#/components/schemas/ServiceTier", + "$ref": "#/components/schemas/ServiceTierResponse", "description": "The service tier used for processing the request. This field is only included if the `service_tier` parameter is specified in the request." } ] @@ -5621,7 +5749,7 @@ "null" ], "format": "int32", - "description": "An integer between 0 and 20 specifying the number of most likely tokens to return at each\ntoken position, each with an associated log probability.", + "description": "An integer between 0 and 20 specifying the number of most likely tokens to return at each\ntoken position, each with an associated log probability. In some cases, the number of returned\ntokens may be fewer than requested.", "minimum": 0 }, "top_p": { @@ -5715,6 +5843,13 @@ "name": { "type": "string", "description": "The name of the custom tool being called." + }, + "namespace": { + "type": [ + "string", + "null" + ], + "description": "The namespace of the custom tool being called." } } }, @@ -5775,6 +5910,13 @@ "format" ], "properties": { + "defer_loading": { + "type": [ + "boolean", + "null" + ], + "description": "Whether this tool should be deferred and discovered via tool search." + }, "description": { "type": [ "string", @@ -5994,51 +6136,25 @@ "y" ], "properties": { - "x": { - "type": "integer", - "format": "int32", - "description": "The x-coordinate where the double click occurred." - }, - "y": { - "type": "integer", - "format": "int32", - "description": "The y-coordinate where the double click occurred." - } - } - }, - "Drag": { - "type": "object", - "description": "A drag action.", - "required": [ - "path" - ], - "properties": { - "path": { - "type": "array", + "keys": { + "type": [ + "array", + "null" + ], "items": { - "$ref": "#/components/schemas/DragPoint" + "type": "string" }, - "description": "The path of points the cursor drags through." - } - } - }, - "DragPoint": { - "type": "object", - "description": "A point in 2D space.", - "required": [ - "x", - "y" - ], - "properties": { + "description": "The keys being held while double clicking." + }, "x": { "type": "integer", "format": "int32", - "description": "The x-coordinate." + "description": "The x-coordinate where the double click occurred." }, "y": { "type": "integer", "format": "int32", - "description": "The y-coordinate." + "description": "The y-coordinate where the double click occurred." } } }, @@ -6071,13 +6187,24 @@ "$ref": "#/components/schemas/EasyInputContent", "description": "Text, image, or audio input to the model, used to generate a response.\nCan also contain previous assistant responses." }, + "phase": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/MessagePhase", + "description": "Labels an `assistant` message as intermediate commentary (`commentary`) or\nthe final answer (`final_answer`). Not used for user messages." + } + ] + }, "role": { "$ref": "#/components/schemas/Role", "description": "The role of the message input. One of `user`, `assistant`, `system`, or `developer`." }, "type": { "$ref": "#/components/schemas/MessageType", - "description": "The type of the message input. Always set to `message`." + "description": "The type of the message input. Defaults to `message` when omitted in JSON input." } } }, @@ -6182,7 +6309,7 @@ }, "ErrorObject": { "type": "object", - "description": "Error returned by the API when a request fails.", + "description": "An error that occurred while generating the response.", "required": [ "code", "message" @@ -6190,11 +6317,11 @@ "properties": { "code": { "type": "string", - "description": "The error code for the response." + "description": "A machine-readable error code that was returned." }, "message": { "type": "string", - "description": "A human-readable description of the error." + "description": "A human-readable description of the error that was returned." } } }, @@ -6629,12 +6756,23 @@ ], "description": "The ID of the entity that created this tool call." }, + "environment": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/FunctionShellCallEnvironment", + "description": "The environment in which the shell commands were executed." + } + ] + }, "id": { "type": "string", "description": "The unique ID of the function shell tool call. Populated when this item is returned via API." }, "status": { - "$ref": "#/components/schemas/LocalShellCallStatus", + "$ref": "#/components/schemas/FunctionShellCallStatus", "description": "The status of the shell call. One of `in_progress`, `completed`, or `incomplete`." } } @@ -6655,6 +6793,17 @@ "type": "string", "description": "The unique ID of the shell tool call generated by the model." }, + "environment": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/FunctionShellCallItemEnvironment", + "description": "The environment to execute the shell commands in." + } + ] + }, "id": { "type": [ "string", @@ -6686,10 +6835,11 @@ }, "FunctionShellCallOutput": { "type": "object", - "description": "The output of a shell tool call.", + "description": "The output of a shell tool call that was emitted.", "required": [ "id", "call_id", + "status", "output" ], "properties": { @@ -6701,7 +6851,8 @@ "type": [ "string", "null" - ] + ], + "description": "The identifier of the actor that created the item." }, "id": { "type": "string", @@ -6722,6 +6873,10 @@ "$ref": "#/components/schemas/FunctionShellCallOutputContent" }, "description": "An array of shell call output contents" + }, + "status": { + "$ref": "#/components/schemas/FunctionShellCallOutputStatusEnum", + "description": "The status of the shell call output. One of `in_progress`, `completed`, or `incomplete`." } } }, @@ -6742,18 +6897,21 @@ "type": [ "string", "null" - ] + ], + "description": "The identifier of the actor that created the item." }, "stderr": { - "type": "string" + "type": "string", + "description": "The standard error output that was captured." }, "stdout": { - "type": "string" + "type": "string", + "description": "The standard output that was captured." } } } ], - "description": "The content of a shell call output." + "description": "The content of a shell tool call output that was emitted." }, "FunctionShellCallOutputContentParam": { "type": "object", @@ -6929,6 +7087,13 @@ "name" ], "properties": { + "defer_loading": { + "type": [ + "boolean", + "null" + ], + "description": "Whether this function is deferred and loaded via tool search." + }, "description": { "type": [ "string", @@ -6979,6 +7144,13 @@ "type": "string", "description": "The name of the function to run." }, + "namespace": { + "type": [ + "string", + "null" + ], + "description": "The namespace of the function to run." + }, "status": { "oneOf": [ { @@ -7066,7 +7238,9 @@ "type": "string", "enum": [ "NoSuchNamespaceException", + "NoSuchTableException", "BadRequestException", + "ServiceUnavailableException", "InternalServerError" ] }, @@ -7086,13 +7260,25 @@ "enum": [ "auto", "low", - "high" + "high", + "original" ] }, "ImageGenTool": { "type": "object", "description": "Image generation tool definition.", "properties": { + "action": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/ImageGenActionEnum", + "description": "Whether to generate a new image or edit an existing image. Default: `auto`." + } + ] + }, "background": { "oneOf": [ { @@ -7191,7 +7377,7 @@ }, { "$ref": "#/components/schemas/ImageGenToolSize", - "description": "The size of the generated image. One of `1024x1024`, `1024x1536`,\n`1536x1024`, or `auto`. Default: `auto`." + "description": "The size of the generated images. For `gpt-image-2` and\n`gpt-image-2-2026-04-21`, arbitrary resolutions are supported as\n`WIDTHxHEIGHT` strings, for example `1536x864`. Width and height\nmust both be divisible by 16 and the requested aspect ratio must be\nbetween 1:3 and 3:1. Resolutions above `2560x1440` are experimental,\nand the maximum supported resolution is `3840x2160`. The requested\nsize must also satisfy the model's current pixel and edge limits.\nThe standard sizes `1024x1024`, `1536x1024`, and `1024x1536` are\nsupported by the GPT image models; `auto` is supported for models\nthat allow automatic sizing. For `dall-e-2`, use one of `256x256`,\n`512x512`, or `1024x1024`. For `dall-e-3`, use one of `1024x1024`,\n`1792x1024`, or `1024x1792`." } ] } @@ -7282,35 +7468,65 @@ ] }, "ImageGenToolSize": { - "type": "string", - "enum": [ - "auto", - "1024x1024", - "1024x1536", - "1536x1024" - ] - }, - "ImageUrl": { - "type": "object", - "required": [ - "url" - ], - "properties": { - "detail": { - "oneOf": [ - { - "type": "null" - }, - { - "$ref": "#/components/schemas/ImageDetail", - "description": "Specifies the detail level of the image. Learn more in the [Vision guide](https://platform.openai.com/docs/guides/vision/low-or-high-fidelity-image-understanding)." - } + "oneOf": [ + { + "type": "string", + "enum": [ + "auto" ] }, - "url": { + { "type": "string", - "description": "Either a URL of the image or the base64 encoded image data." - } + "enum": [ + "1024x1024" + ] + }, + { + "type": "string", + "enum": [ + "1024x1536" + ] + }, + { + "type": "string", + "enum": [ + "1536x1024" + ] + }, + { + "type": "object", + "required": [ + "other" + ], + "properties": { + "other": { + "type": "string" + } + } + } + ] + }, + "ImageUrl": { + "type": "object", + "required": [ + "url" + ], + "properties": { + "detail": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/ImageDetail", + "description": "Specifies the detail level of the image. Learn more in the [Vision guide](https://platform.openai.com/docs/guides/vision/low-or-high-fidelity-image-understanding)." + } + ] + }, + "url": { + "type": "string", + "description": "Either a URL of the image or the base64 encoded image data." + } } }, "IncludeEnum": { @@ -7447,6 +7663,17 @@ "InputFileContent": { "type": "object", "properties": { + "detail": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/FileInputDetail", + "description": "The detail level of the file to be sent to the model. Use `low` for the default rendering\nbehavior, or `high` to render the file at higher quality. Defaults to `low`." + } + ] + }, "file_data": { "type": [ "string", @@ -7479,13 +7706,10 @@ }, "InputImageContent": { "type": "object", - "required": [ - "detail" - ], "properties": { "detail": { "$ref": "#/components/schemas/ImageDetail", - "description": "The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`.\nDefaults to `auto`." + "description": "The detail level of the image to be sent to the model. One of `high`, `low`, or `auto`.\nDefaults to `auto` when omitted in JSON input." }, "file_id": { "type": [ @@ -7780,6 +8004,52 @@ ], "description": "The output of a function tool call." }, + { + "allOf": [ + { + "$ref": "#/components/schemas/ToolSearchCallItemParam", + "description": "A tool search call." + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "tool_search_call" + ] + } + } + } + ], + "description": "A tool search call." + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/ToolSearchOutputItemParam", + "description": "A tool search output." + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "tool_search_output" + ] + } + } + } + ], + "description": "A tool search output." + }, { "allOf": [ { @@ -8232,24 +8502,23 @@ }, "LoadTableResponse": { "type": "object", + "description": "The Iceberg REST `LoadTableResult`: the table's metadata and where it is\nstored. No `config` or `storage-credentials`: a client reads the table's\nfiles with its own credentials.", "required": [ "metadata" ], "properties": { "metadata": { - "$ref": "#/components/schemas/TableMetadata" + "type": "object", + "description": "Iceberg table metadata, see ``." + }, + "metadata-location": { + "type": [ + "string", + "null" + ] } } }, - "LocalShellCallStatus": { - "type": "string", - "description": "Status values reported for function shell tool calls.", - "enum": [ - "in_progress", - "completed", - "incomplete" - ] - }, "LocalShellExecAction": { "type": "object", "description": "Define the shape of a local shell action (exec).", @@ -8540,6 +8809,13 @@ } ] }, + "defer_loading": { + "type": [ + "boolean", + "null" + ], + "description": "Whether this MCP tool is deferred and discovered via tool search." + }, "headers": { "description": "Optional HTTP headers to send to the MCP server. Use for authentication or other purposes." }, @@ -8935,26 +9211,6 @@ } } }, - "Move": { - "type": "object", - "description": "A mouse move action.", - "required": [ - "x", - "y" - ], - "properties": { - "x": { - "type": "integer", - "format": "int32", - "description": "The x-coordinate to move to." - }, - "y": { - "type": "integer", - "format": "int32", - "description": "The y-coordinate to move to." - } - } - }, "Namespace": { "type": "object", "required": [ @@ -9054,6 +9310,29 @@ ], "description": "A tool call to run a function. See the\n[function calling guide](https://platform.openai.com/docs/guides/function-calling)\nfor more information." }, + { + "allOf": [ + { + "$ref": "#/components/schemas/FunctionToolCallOutputResource", + "description": "The output of a function tool call." + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "function_call_output" + ] + } + } + } + ], + "description": "The output of a function tool call." + }, { "allOf": [ { @@ -9100,6 +9379,29 @@ ], "description": "A tool call to a computer use tool. See the\n[computer use guide](https://platform.openai.com/docs/guides/tools-computer-use)\nfor more information." }, + { + "allOf": [ + { + "$ref": "#/components/schemas/ComputerToolCallOutputResource", + "description": "The output of a computer tool call." + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "computer_call_output" + ] + } + } + } + ], + "description": "The output of a computer tool call." + }, { "allOf": [ { @@ -9398,6 +9700,75 @@ } ], "description": "A call to a custom tool created by the model." + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/CustomToolCallOutputResource", + "description": "The output of a custom tool call." + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "custom_tool_call_output" + ] + } + } + } + ], + "description": "The output of a custom tool call." + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/ToolSearchCall", + "description": "A tool search call." + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "tool_search_call" + ] + } + } + } + ], + "description": "A tool search call." + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/ToolSearchOutput", + "description": "A tool search output." + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "tool_search_output" + ] + } + } + } + ], + "description": "A tool search output." } ], "description": "Output item" @@ -9423,6 +9794,17 @@ "type": "string", "description": "The unique ID of the output message." }, + "phase": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/MessagePhase", + "description": "Labels this assistant message as intermediate commentary (`commentary`) or\nthe final answer (`final_answer`)." + } + ] + }, "role": { "$ref": "#/components/schemas/AssistantRole", "description": "The role of the output message. Always `assistant`." @@ -9721,7 +10103,6 @@ "type": "object", "description": "A reasoning item representing the model's chain of thought, including summary paragraphs.", "required": [ - "id", "summary" ], "properties": { @@ -9731,7 +10112,7 @@ "null" ], "items": { - "$ref": "#/components/schemas/ReasoningTextContent" + "$ref": "#/components/schemas/ReasoningItemContent" }, "description": "Reasoning text content." }, @@ -9743,7 +10124,10 @@ "description": "The encrypted content of the reasoning item - populated when a response is generated with\n`reasoning.encrypted_content` in the `include` parameter." }, "id": { - "type": "string", + "type": [ + "string", + "null" + ], "description": "Unique identifier of the reasoning content." }, "status": { @@ -9872,12 +10256,23 @@ "stream": { "type": "boolean", "description": "If true, streams the response instead of waiting for completion" - } - } - }, - "Response": { - "type": "object", - "description": "The complete response returned by the Responses API.", + }, + "reasoning_effort": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/ReasoningEffort", + "description": "How much the model reasons before it writes SQL. Omitted keeps the model setting." + } + ] + } + } + }, + "Response": { + "type": "object", + "description": "The complete response returned by the Responses API.", "required": [ "created_at", "id", @@ -9905,6 +10300,15 @@ } ] }, + "completed_at": { + "type": [ + "integer", + "null" + ], + "format": "int64", + "description": "Unix timestamp (in seconds) of when this Response was completed.\nOnly present when the status is `completed`.", + "minimum": 0 + }, "conversation": { "oneOf": [ { @@ -10063,7 +10467,7 @@ "type": "null" }, { - "$ref": "#/components/schemas/ServiceTier", + "$ref": "#/components/schemas/ServiceTierResponse", "description": "Specifies the processing type used for serving the request.\n- If set to 'auto', then the request will be processed with the service tier configured in the Project settings. Unless otherwise configured, the Project will use 'default'.\n- If set to 'default', then the request will be processed with the standard pricing and performance for the selected model.\n- If set to '[flex](https://platform.openai.com/docs/guides/flex-processing)' or '[priority](https://openai.com/api-priority-processing/)', then the request will be processed with the corresponding service tier.\n- When not set, the default behavior is 'auto'.\n\nWhen the `service_tier` parameter is set, the response body will include the `service_tier` value based on the processing mode actually used to serve the request. This response value may be different from the value set in the parameter." } ] @@ -10209,7 +10613,8 @@ "ResponseFormatJsonSchema": { "type": "object", "required": [ - "name" + "name", + "schema" ], "properties": { "description": { @@ -10269,9 +10674,6 @@ "ResponseTextParam": { "type": "object", "description": "Configuration for text response format.", - "required": [ - "format" - ], "properties": { "format": { "$ref": "#/components/schemas/TextResponseFormatConfiguration", @@ -10339,38 +10741,6 @@ "developer" ] }, - "Scroll": { - "type": "object", - "description": "A scroll action.", - "required": [ - "scroll_x", - "scroll_y", - "x", - "y" - ], - "properties": { - "scroll_x": { - "type": "integer", - "format": "int32", - "description": "The horizontal scroll distance." - }, - "scroll_y": { - "type": "integer", - "format": "int32", - "description": "The vertical scroll distance." - }, - "x": { - "type": "integer", - "format": "int32", - "description": "The x-coordinate where the scroll occurred." - }, - "y": { - "type": "integer", - "format": "int32", - "description": "The y-coordinate where the scroll occurred." - } - } - }, "SearchRequestBaseJson": { "type": "object", "required": [ @@ -10460,6 +10830,7 @@ }, "ServiceTier": { "type": "string", + "description": "The processing tier a request asks for.", "enum": [ "auto", "default", @@ -10581,25 +10952,12 @@ "description": "Represents the status of a component (e.g. dataset, model, etc).\n\nThe `Error` variant optionally carries a human-readable error message describing\nwhat caused the component to enter the error state. Use [`ComponentStatus::error`]\nfor an error without a message, or [`ComponentStatus::error_with_message`] to\ninclude one.", "example": "Ready" }, - "Summary": { - "type": "object", - "description": "A single summary text fragment from reasoning.", - "required": [ - "text" - ], - "properties": { - "text": { - "type": "string", - "description": "A summary of the reasoning output from the model so far." - } - } - }, "SummaryPart": { "oneOf": [ { "allOf": [ { - "$ref": "#/components/schemas/Summary" + "$ref": "#/components/schemas/SummaryTextContent" }, { "type": "object", @@ -10619,12 +10977,6 @@ } ] }, - "TableFormatVersion": { - "type": "string", - "enum": [ - "V2" - ] - }, "TableIdentifier": { "type": "object", "required": [ @@ -10640,80 +10992,6 @@ } } }, - "TableMetadata": { - "type": "object", - "required": [ - "format-version", - "table-uuid", - "location", - "schemas", - "last-updated-ms", - "last-column-id", - "last-sequence-number", - "current-schema-id", - "partition-specs", - "default-spec-id", - "last-partition-id", - "sort-orders", - "default-sort-order-id" - ], - "properties": { - "current-schema-id": { - "type": "integer", - "format": "int32", - "minimum": 0 - }, - "default-sort-order-id": { - "type": "integer", - "format": "int32", - "minimum": 0 - }, - "default-spec-id": { - "type": "integer", - "format": "int32", - "minimum": 0 - }, - "format-version": { - "$ref": "#/components/schemas/TableFormatVersion" - }, - "last-column-id": { - "type": "integer", - "format": "int32", - "minimum": 0 - }, - "last-partition-id": { - "type": "integer", - "format": "int32", - "minimum": 0 - }, - "last-sequence-number": { - "type": "integer", - "format": "int64", - "minimum": 0 - }, - "last-updated-ms": { - "type": "integer", - "format": "int64" - }, - "location": { - "type": "string" - }, - "partition-specs": { - "type": "object" - }, - "schemas": { - "type": "object", - "description": "Iceberg schemas, see ``." - }, - "sort-orders": { - "type": "object" - }, - "table-uuid": { - "type": "string", - "example": "2b9da507-2c07-4bb3-9f0b-8df66a5e9e53" - } - } - }, "TextResponseFormatConfiguration": { "oneOf": [ { @@ -10973,19 +11251,27 @@ } }, { - "type": "object", - "description": "A tool that allows the model to execute shell commands.", - "required": [ - "type" - ], - "properties": { - "type": { - "type": "string", - "enum": [ - "shell" - ] + "allOf": [ + { + "$ref": "#/components/schemas/FunctionShellToolParam", + "description": "A tool that allows the model to execute shell commands." + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "shell" + ] + } + } } - } + ], + "description": "A tool that allows the model to execute shell commands." }, { "allOf": [ @@ -11010,6 +11296,75 @@ ], "description": "A custom tool that processes input using a specified format. Learn more about [custom\ntools](https://platform.openai.com/docs/guides/function-calling#custom-tools)" }, + { + "allOf": [ + { + "$ref": "#/components/schemas/ComputerTool", + "description": "A tool that controls a virtual computer. Learn more about the\n[computer tool](https://platform.openai.com/docs/guides/tools-computer-use)." + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "computer" + ] + } + } + } + ], + "description": "A tool that controls a virtual computer. Learn more about the\n[computer tool](https://platform.openai.com/docs/guides/tools-computer-use)." + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/NamespaceToolParam", + "description": "Groups function/custom tools under a shared namespace." + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "namespace" + ] + } + } + } + ], + "description": "Groups function/custom tools under a shared namespace." + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/ToolSearchToolParam", + "description": "Hosted or BYOT tool search configuration for deferred tools." + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "tool_search" + ] + } + } + } + ], + "description": "Hosted or BYOT tool search configuration for deferred tools." + }, { "allOf": [ { @@ -11350,6 +11705,20 @@ } } }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "computer" + ] + } + } + }, { "type": "object", "required": [ @@ -11364,6 +11733,34 @@ } } }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "computer_use" + ] + } + } + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "web_search_preview_2025_03_11" + ] + } + } + }, { "type": "object", "required": [ @@ -11458,19 +11855,6 @@ "disabled" ] }, - "Type": { - "type": "object", - "description": "A typing (text entry) action.", - "required": [ - "text" - ], - "properties": { - "text": { - "type": "string", - "description": "The text to type." - } - } - }, "UrlCitation": { "type": "object", "required": [ @@ -11561,13 +11945,13 @@ }, "WebSearchActionOpenPage": { "type": "object", - "required": [ - "url" - ], "properties": { "url": { - "type": "string", - "description": "The URL opened by the model." + "type": [ + "string", + "null" + ], + "description": "The URL opened by the model." } } }, @@ -11613,9 +11997,6 @@ "WebSearchApproximateLocation": { "type": "object", "description": "Approximate user location for web search.", - "required": [ - "type" - ], "properties": { "city": { "type": [ @@ -11647,7 +12028,7 @@ }, "type": { "$ref": "#/components/schemas/WebSearchApproximateLocationType", - "description": "The type of location approximation. Always `approximate`." + "description": "The type of location approximation. Defaults to `approximate` when omitted in JSON input." } } }, @@ -11742,6 +12123,16 @@ } ] }, + "search_content_types": { + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/SearchContentType" + }, + "description": "The types of content to search for." + }, "search_context_size": { "oneOf": [ { @@ -11770,14 +12161,20 @@ "type": "object", "description": "Web search tool call output.", "required": [ - "action", "id", "status" ], "properties": { "action": { - "$ref": "#/components/schemas/WebSearchToolCallAction", - "description": "An object describing the specific action taken in this web search call. Includes\ndetails on how the model used the web (search, open_page, find)." + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/WebSearchToolCallAction", + "description": "An object describing the specific action taken in this web search call. Includes\ndetails on how the model used the web (search, open_page, find, find_in_page).\n\nThis is optional because `response.output_item.added` events can include\nin-progress web search calls before OpenAI has populated the action.\nSee ." + } + ] }, "id": { "type": "string", @@ -11859,6 +12256,29 @@ } ], "description": "Action type \"find\": Searches for a pattern within a loaded page." + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/WebSearchActionFind", + "description": "Action type \"find_in_page\": " + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "find_in_page" + ] + } + } + } + ], + "description": "Action type \"find_in_page\": " } ] }, @@ -11971,6 +12391,1794 @@ "description": "The type of the response (always `list`)" } } + }, + "ChoiceOption": { + "type": "object", + "description": "One option of a choice question.", + "required": [ + "value" + ], + "properties": { + "description": { + "type": [ + "string", + "null" + ] + }, + "value": { + "$ref": "#/components/schemas/ChoiceValue" + } + }, + "additionalProperties": false + }, + "ChoiceProbability": { + "type": "object", + "description": "The probability of one choice option.", + "required": [ + "value", + "probability" + ], + "properties": { + "probability": { + "type": "number", + "format": "double" + }, + "value": { + "$ref": "#/components/schemas/ChoiceValue" + } + } + }, + "ChoiceValue": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "string" + } + ], + "description": "A choice value. `OpenAI` treats a string and a boolean with the same text as\ndifferent values." + }, + "ComputerCallOutputStatus": { + "type": "string", + "description": "The status of a computer tool call output item returned by the API.", + "enum": [ + "in_progress", + "completed", + "incomplete", + "failed" + ] + }, + "ComputerTool": { + "type": "object", + "description": "A tool that controls a virtual computer. Learn more about the\n[computer tool](https://platform.openai.com/docs/guides/tools-computer-use)." + }, + "ComputerToolCallOutputResource": { + "type": "object", + "description": "A computer tool call output item returned by the API.", + "required": [ + "call_id", + "output", + "id", + "status" + ], + "properties": { + "acknowledged_safety_checks": { + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/ComputerCallSafetyCheckParam" + }, + "description": "The safety checks reported by the API that have been acknowledged by the developer." + }, + "call_id": { + "type": "string", + "description": "The ID of the computer tool call that produced the output." + }, + "created_by": { + "type": [ + "string", + "null" + ], + "description": "The identifier of the actor that created the item." + }, + "id": { + "type": "string", + "description": "The unique ID of the computer tool call output." + }, + "output": { + "$ref": "#/components/schemas/ComputerScreenshotImage", + "description": "A computer screenshot image used with the computer use tool." + }, + "status": { + "$ref": "#/components/schemas/ComputerCallOutputStatus", + "description": "The status of the item returned by the API." + } + } + }, + "ContainerAutoParam": { + "type": "object", + "description": "Automatically creates a container for the request.", + "properties": { + "file_ids": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "description": "An optional list of uploaded file IDs to make available in the container." + }, + "network_policy": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/ContainerNetworkPolicy", + "description": "Network access policy for the container." + } + ] + }, + "skills": { + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/SkillParam" + }, + "description": "An optional list of skills to make available in the container." + } + } + }, + "ContainerNetworkPolicy": { + "oneOf": [ + { + "type": "object", + "description": "Disable all outbound network access.", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "disabled" + ] + } + } + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerNetworkPolicyAllowlistDetails", + "description": "Allow access only to specified domains." + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "allowlist" + ] + } + } + } + ], + "description": "Allow access only to specified domains." + } + ], + "description": "Network access policy for a container." + }, + "ContainerNetworkPolicyAllowlistDetails": { + "type": "object", + "description": "Details for an allowlist network policy.", + "required": [ + "allowed_domains" + ], + "properties": { + "allowed_domains": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of allowed domains." + }, + "domain_secrets": { + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/ContainerNetworkPolicyDomainSecretParam" + }, + "description": "Optional domain-scoped secrets for allowlisted domains." + } + } + }, + "ContainerNetworkPolicyDomainSecretParam": { + "type": "object", + "description": "A domain-scoped secret injected for allowlisted domains.", + "required": [ + "domain", + "name", + "value" + ], + "properties": { + "domain": { + "type": "string", + "description": "The domain associated with the secret." + }, + "name": { + "type": "string", + "description": "The name of the secret to inject for the domain." + }, + "value": { + "type": "string", + "description": "The secret value to inject for the domain." + } + } + }, + "ContainerReferenceParam": { + "type": "object", + "description": "References a container created with the /v1/containers endpoint.", + "required": [ + "container_id" + ], + "properties": { + "container_id": { + "type": "string", + "description": "The ID of the referenced container." + } + } + }, + "ContainerReferenceResource": { + "type": "object", + "description": "A resource reference to a container by ID.", + "required": [ + "container_id" + ], + "properties": { + "container_id": { + "type": "string", + "description": "The ID of the referenced container." + } + } + }, + "CoordParam": { + "type": "object", + "description": "An x/y coordinate pair.", + "required": [ + "x", + "y" + ], + "properties": { + "x": { + "type": "integer", + "format": "int32", + "description": "The x-coordinate." + }, + "y": { + "type": "integer", + "format": "int32", + "description": "The y-coordinate." + } + } + }, + "CustomToolCallOutputResource": { + "type": "object", + "description": "A custom tool call output item returned by the API.", + "required": [ + "call_id", + "output", + "id", + "status" + ], + "properties": { + "call_id": { + "type": "string", + "description": "The call ID, used to map this custom tool call output to a custom tool call." + }, + "created_by": { + "type": [ + "string", + "null" + ], + "description": "The identifier of the actor that created the item." + }, + "id": { + "type": "string", + "description": "The unique ID of the custom tool call output item." + }, + "output": { + "$ref": "#/components/schemas/CustomToolCallOutputOutput", + "description": "The output from the custom tool call generated by your code.\nCan be a string or a list of output content." + }, + "status": { + "$ref": "#/components/schemas/FunctionCallOutputStatusEnum", + "description": "The status of the item. One of `in_progress`, `completed`, or `incomplete`." + } + } + }, + "DecisionAnswer": { + "oneOf": [ + { + "type": "object", + "required": [ + "probability", + "type" + ], + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "probability": { + "type": "number", + "format": "double" + }, + "type": { + "type": "string", + "enum": [ + "predicate" + ] + } + } + }, + { + "type": "object", + "required": [ + "choice", + "probabilities", + "confidence", + "type" + ], + "properties": { + "choice": { + "$ref": "#/components/schemas/ChoiceValue" + }, + "confidence": { + "type": "number", + "format": "double" + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "probabilities": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChoiceProbability" + } + }, + "type": { + "type": "string", + "enum": [ + "choice" + ] + } + } + }, + { + "type": "object", + "required": [ + "score", + "probabilities", + "confidence", + "type" + ], + "properties": { + "confidence": { + "type": "number", + "format": "double" + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "probabilities": { + "type": "array", + "items": { + "$ref": "#/components/schemas/LevelProbability" + } + }, + "score": { + "type": "number", + "format": "double" + }, + "type": { + "type": "string", + "enum": [ + "score" + ] + } + } + }, + { + "type": "object", + "description": "The model declined to answer this question; the other answers stand.", + "required": [ + "type" + ], + "properties": { + "name": { + "type": [ + "string", + "null" + ] + }, + "type": { + "type": "string", + "enum": [ + "refusal" + ] + } + } + } + ], + "description": "The answer to one question. `name` echoes the question's name, or is null." + }, + "DecisionInput": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/DecisionInputMessage" + } + } + ], + "description": "The evidence every question is answered from." + }, + "DecisionInputMessage": { + "type": "object", + "description": "A user message carrying text.", + "required": [ + "role", + "content" + ], + "properties": { + "content": { + "$ref": "#/components/schemas/DecisionMessageContent" + }, + "role": { + "$ref": "#/components/schemas/DecisionInputRole" + }, + "type": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/DecisionMessageType" + } + ] + } + }, + "additionalProperties": false + }, + "DecisionInputPart": { + "oneOf": [ + { + "type": "object", + "required": [ + "text", + "type" + ], + "properties": { + "text": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "input_text" + ] + } + } + }, + { + "type": "object", + "required": [ + "image_url", + "type" + ], + "properties": { + "detail": { + "type": [ + "string", + "null" + ] + }, + "image_url": { + "type": "string" + }, + "type": { + "type": "string", + "enum": [ + "input_image" + ] + } + } + } + ], + "description": "One part of a message. Image parts are accepted by the schema and refused with a\nmessage naming the limitation, so a client learns why rather than seeing a parse error." + }, + "DecisionInputRole": { + "type": "string", + "description": "Only user messages are accepted.", + "enum": [ + "user" + ] + }, + "DecisionMessageContent": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/DecisionInputPart" + } + } + ], + "description": "A message's content: a string, or a list of parts." + }, + "DecisionMessageType": { + "type": "string", + "description": "The optional `type` of an input message.", + "enum": [ + "message" + ] + }, + "DecisionQuestion": { + "oneOf": [ + { + "type": "object", + "description": "How likely a statement about the input is true. Answered with a `probability`.", + "required": [ + "instructions", + "type" + ], + "properties": { + "instructions": { + "type": "string" + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "type": { + "type": "string", + "enum": [ + "predicate" + ] + } + } + }, + { + "type": "object", + "description": "Which of the supplied options fits the input. Answered with the most probable\noption and the distribution over all of them.", + "required": [ + "instructions", + "choices", + "type" + ], + "properties": { + "choices": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ChoiceOption" + }, + "description": "Between 2 and 255 distinct options." + }, + "instructions": { + "type": "string" + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "type": { + "type": "string", + "enum": [ + "choice" + ] + } + } + }, + { + "type": "object", + "description": "Where the input sits on ordered levels, lowest first. Answered with the\nprobability-weighted 0-based level index.", + "required": [ + "instructions", + "levels", + "type" + ], + "properties": { + "instructions": { + "type": "string" + }, + "levels": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ScoreLevel" + }, + "description": "Between 2 and 10 levels, lowest first." + }, + "name": { + "type": [ + "string", + "null" + ] + }, + "type": { + "type": "string", + "enum": [ + "score" + ] + } + } + } + ], + "description": "A question about the input, with an optional name echoed in its answer." + }, + "DecisionRequest": { + "type": "object", + "description": "Request body for `POST /v1/decisions`.", + "required": [ + "model", + "input", + "questions" + ], + "properties": { + "input": { + "$ref": "#/components/schemas/DecisionInput", + "description": "Shared evidence for every question: a text string, or user messages with text\nparts." + }, + "model": { + "type": "string", + "description": "The model that answers: the name of a model under `models` in the Spicepod." + }, + "questions": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DecisionQuestion" + }, + "description": "What to decide, in order: between 1 and 200 questions." + }, + "reasoning_effort": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/ReasoningEffort", + "description": "How much a chat model reasons before it answers. Omitted keeps the model's\nsetting. A Spice extension: `OpenAI`'s Decisions API has no such field, and a\ndecision model returns 400 for it." + } + ] + }, + "safety_identifier": { + "type": [ + "string", + "null" + ], + "description": "Opaque end-user identifier, at most 128 characters. Forwarded to `OpenAI`\ndecision models." + } + }, + "additionalProperties": false + }, + "DecisionResponse": { + "type": "object", + "description": "Response body for `POST /v1/decisions`.", + "required": [ + "model", + "answers" + ], + "properties": { + "answers": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DecisionAnswer" + }, + "description": "One answer per question, in question order." + }, + "model": { + "type": "string", + "description": "The model that answered, by the name the request used." + }, + "usage": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/DecisionUsage", + "description": "Tokens the decision used. Omitted when the model did not report them." + } + ] + } + } + }, + "DecisionUsage": { + "type": "object", + "description": "Tokens a decision used.", + "required": [ + "input_tokens", + "output_tokens" + ], + "properties": { + "input_tokens": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "input_tokens_details": { + "$ref": "#/components/schemas/InputTokensDetails" + }, + "output_tokens": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "output_tokens_details": { + "$ref": "#/components/schemas/OutputTokensDetails" + }, + "total_tokens": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + } + }, + "DragParam": { + "type": "object", + "description": "A drag action.", + "required": [ + "path" + ], + "properties": { + "keys": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "description": "The keys being held while dragging the mouse." + }, + "path": { + "type": "array", + "items": { + "$ref": "#/components/schemas/CoordParam" + }, + "description": "An array of coordinates representing the path of the drag action." + } + } + }, + "FileInputDetail": { + "type": "string", + "description": "The detail level of a file input sent to the model.", + "enum": [ + "low", + "high" + ] + }, + "FunctionCallOutputStatusEnum": { + "type": "string", + "description": "The status of a function call output.", + "enum": [ + "in_progress", + "completed", + "incomplete" + ] + }, + "FunctionCallStatus": { + "type": "string", + "description": "The status of a function call.", + "enum": [ + "in_progress", + "completed", + "incomplete" + ] + }, + "FunctionShellCallEnvironment": { + "oneOf": [ + { + "type": "object", + "description": "A local computer environment.", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "local" + ] + } + } + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerReferenceResource", + "description": "A referenced container." + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "container_reference" + ] + } + } + } + ], + "description": "A referenced container." + } + ], + "description": "The environment for a shell call (response side)." + }, + "FunctionShellCallItemEnvironment": { + "oneOf": [ + { + "allOf": [ + { + "$ref": "#/components/schemas/LocalEnvironmentParam", + "description": "Use a local computer environment." + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "local" + ] + } + } + } + ], + "description": "Use a local computer environment." + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerReferenceParam", + "description": "Reference an existing container by ID." + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "container_reference" + ] + } + } + } + ], + "description": "Reference an existing container by ID." + } + ], + "description": "The environment for a shell call item (request side)." + }, + "FunctionShellCallOutputStatusEnum": { + "type": "string", + "description": "Status values reported for function shell tool call outputs.", + "enum": [ + "in_progress", + "completed", + "incomplete" + ] + }, + "FunctionShellCallStatus": { + "type": "string", + "description": "Status values reported for function shell tool calls.", + "enum": [ + "in_progress", + "completed", + "incomplete" + ] + }, + "FunctionShellEnvironment": { + "oneOf": [ + { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerAutoParam", + "description": "Automatically creates a container for this request." + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "container_auto" + ] + } + } + } + ], + "description": "Automatically creates a container for this request." + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/LocalEnvironmentParam", + "description": "Use a local computer environment." + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "local" + ] + } + } + } + ], + "description": "Use a local computer environment." + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/ContainerReferenceParam", + "description": "Reference an existing container by ID." + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "container_reference" + ] + } + } + } + ], + "description": "Reference an existing container by ID." + } + ], + "description": "The execution environment for a shell tool — container or local." + }, + "FunctionShellToolParam": { + "type": "object", + "description": "Parameters for the shell function tool.", + "properties": { + "environment": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/FunctionShellEnvironment", + "description": "The execution environment for the shell tool." + } + ] + } + } + }, + "FunctionToolCallOutputResource": { + "type": "object", + "description": "A function tool call output item returned by the API.", + "required": [ + "call_id", + "output", + "id", + "status" + ], + "properties": { + "call_id": { + "type": "string", + "description": "The unique ID of the function tool call generated by the model." + }, + "created_by": { + "type": [ + "string", + "null" + ], + "description": "The identifier of the actor that created the item." + }, + "id": { + "type": "string", + "description": "The unique ID of the function tool call output." + }, + "output": { + "$ref": "#/components/schemas/FunctionCallOutput", + "description": "Text, image, or file output of the function tool call." + }, + "status": { + "$ref": "#/components/schemas/FunctionCallOutputStatusEnum", + "description": "The status of the item. One of `in_progress`, `completed`, or `incomplete`." + } + } + }, + "FunctionToolParam": { + "type": "object", + "description": "A function tool that can be used within a namespace or with tool search.", + "required": [ + "name" + ], + "properties": { + "defer_loading": { + "type": [ + "boolean", + "null" + ], + "description": "Whether this function should be deferred and discovered via tool search." + }, + "description": { + "type": [ + "string", + "null" + ], + "description": "A description of the function." + }, + "name": { + "type": "string", + "description": "The name of the function." + }, + "parameters": { + "description": "A JSON schema object describing the parameters of the function." + }, + "strict": { + "type": [ + "boolean", + "null" + ], + "description": "Whether to enforce strict parameter validation." + } + } + }, + "GetNamespaceResponse": { + "type": "object", + "description": "The Iceberg REST `GetNamespaceResponse`.", + "required": [ + "namespace" + ], + "properties": { + "namespace": { + "$ref": "#/components/schemas/Namespace" + }, + "properties": { + "type": [ + "object", + "null" + ], + "description": "Always `null`: Spice does not store namespace properties, and the spec\nasks a server without them to return `null` rather than `{}`.", + "additionalProperties": { + "type": "string" + }, + "propertyNames": { + "type": "string" + } + } + } + }, + "ImageGenActionEnum": { + "type": "string", + "description": "Whether to generate a new image or edit an existing image.", + "enum": [ + "generate", + "edit", + "auto" + ] + }, + "InlineSkillParam": { + "type": "object", + "description": "An inline skill definition.", + "required": [ + "name", + "description", + "source" + ], + "properties": { + "description": { + "type": "string", + "description": "The description of the skill." + }, + "name": { + "type": "string", + "description": "The name of the skill." + }, + "source": { + "$ref": "#/components/schemas/InlineSkillSourceParam", + "description": "The inline source for the skill." + } + } + }, + "InlineSkillSourceParam": { + "type": "object", + "description": "An inline skill source (base64-encoded zip).", + "required": [ + "media_type", + "data" + ], + "properties": { + "data": { + "type": "string", + "description": "The base64-encoded skill data." + }, + "media_type": { + "type": "string", + "description": "The media type. Always `\"application/zip\"`." + } + } + }, + "InputTokensDetails": { + "type": "object", + "description": "Breakdown of input tokens. Zero unless the model reports a cache.", + "properties": { + "cache_write_tokens": { + "type": "integer", + "format": "int64", + "minimum": 0 + }, + "cached_tokens": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + } + }, + "LevelProbability": { + "type": "object", + "description": "The probability of one score level, by its 0-based index.", + "required": [ + "value", + "label", + "probability" + ], + "properties": { + "label": { + "type": "string" + }, + "probability": { + "type": "number", + "format": "double" + }, + "value": { + "type": "integer", + "format": "int32", + "minimum": 0 + } + } + }, + "LocalEnvironmentParam": { + "type": "object", + "description": "Uses a local computer environment.", + "properties": { + "skills": { + "type": [ + "array", + "null" + ], + "items": { + "$ref": "#/components/schemas/LocalSkillParam" + }, + "description": "An optional list of local skills." + } + } + }, + "LocalSkillParam": { + "type": "object", + "description": "A local skill available in a local environment.", + "required": [ + "name", + "description", + "path" + ], + "properties": { + "description": { + "type": "string", + "description": "The description of the skill." + }, + "name": { + "type": "string", + "description": "The name of the skill." + }, + "path": { + "type": "string", + "description": "The path to the directory containing the skill." + } + } + }, + "MessagePhase": { + "type": "string", + "description": "Labels an `assistant` message as intermediate commentary or the final answer.\nFor models like `gpt-5.3-codex` and beyond, when sending follow-up requests, preserve and resend\nphase on all assistant messages — dropping it can degrade performance.", + "enum": [ + "commentary", + "final_answer" + ] + }, + "MoveParam": { + "type": "object", + "description": "A mouse move action.", + "required": [ + "x", + "y" + ], + "properties": { + "keys": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "description": "The keys being held while moving the mouse." + }, + "x": { + "type": "integer", + "format": "int32", + "description": "The x-coordinate to move to." + }, + "y": { + "type": "integer", + "format": "int32", + "description": "The y-coordinate to move to." + } + } + }, + "NamespaceToolParam": { + "type": "object", + "description": "Groups function/custom tools under a shared namespace.", + "required": [ + "name", + "description", + "tools" + ], + "properties": { + "description": { + "type": "string", + "description": "A description of the namespace shown to the model." + }, + "name": { + "type": "string", + "description": "The namespace name used in tool calls (for example, `crm`)." + }, + "tools": { + "type": "array", + "items": { + "$ref": "#/components/schemas/NamespaceToolParamTool" + }, + "description": "The function/custom tools available inside this namespace." + } + } + }, + "NamespaceToolParamTool": { + "oneOf": [ + { + "allOf": [ + { + "$ref": "#/components/schemas/FunctionToolParam" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "function" + ] + } + } + } + ] + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/CustomToolParam" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "custom" + ] + } + } + } + ] + } + ], + "description": "A function or custom tool that belongs to a namespace." + }, + "OutputTokensDetails": { + "type": "object", + "description": "Breakdown of output tokens. Zero unless the model reports reasoning.", + "properties": { + "reasoning_tokens": { + "type": "integer", + "format": "int64", + "minimum": 0 + } + } + }, + "ReasoningItemContent": { + "oneOf": [ + { + "allOf": [ + { + "$ref": "#/components/schemas/ReasoningTextContent" + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "reasoning_text" + ] + } + } + } + ] + } + ], + "description": "[ReasoningTextContent] used elsewhere which adds type,\nbut here in [ReasoningItem] content field we need type too hence an enum:" + }, + "ScoreLevel": { + "type": "object", + "description": "One level of a score question.", + "required": [ + "label" + ], + "properties": { + "description": { + "type": [ + "string", + "null" + ] + }, + "label": { + "type": "string" + } + }, + "additionalProperties": false + }, + "ScrollParam": { + "type": "object", + "description": "A scroll action.", + "required": [ + "scroll_x", + "scroll_y", + "x", + "y" + ], + "properties": { + "keys": { + "type": [ + "array", + "null" + ], + "items": { + "type": "string" + }, + "description": "The keys being held while scrolling." + }, + "scroll_x": { + "type": "integer", + "format": "int32", + "description": "The horizontal scroll distance." + }, + "scroll_y": { + "type": "integer", + "format": "int32", + "description": "The vertical scroll distance." + }, + "x": { + "type": "integer", + "format": "int32", + "description": "The x-coordinate where the scroll occurred." + }, + "y": { + "type": "integer", + "format": "int32", + "description": "The y-coordinate where the scroll occurred." + } + } + }, + "SearchContentType": { + "type": "string", + "description": "The type of content to search for.", + "enum": [ + "text", + "image" + ] + }, + "ServiceTierResponse": { + "anyOf": [ + { + "type": "string", + "enum": [ + "auto", + "default", + "flex", + "scale", + "priority" + ] + }, + { + "type": "string" + } + ] + }, + "SkillParam": { + "oneOf": [ + { + "allOf": [ + { + "$ref": "#/components/schemas/SkillReferenceParam", + "description": "Reference a skill by ID." + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "skill_reference" + ] + } + } + } + ], + "description": "Reference a skill by ID." + }, + { + "allOf": [ + { + "$ref": "#/components/schemas/InlineSkillParam", + "description": "Provide an inline skill definition." + }, + { + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "type": "string", + "enum": [ + "inline" + ] + } + } + } + ], + "description": "Provide an inline skill definition." + } + ], + "description": "A skill parameter — either a reference or inline definition." + }, + "SkillReferenceParam": { + "type": "object", + "description": "A skill referenced by ID.", + "required": [ + "skill_id" + ], + "properties": { + "skill_id": { + "type": "string", + "description": "The ID of the skill to reference." + }, + "version": { + "type": [ + "string", + "null" + ], + "description": "An optional specific version to use." + } + } + }, + "SummaryTextContent": { + "type": "object", + "required": [ + "text" + ], + "properties": { + "text": { + "type": "string", + "description": "A summary of the reasoning output from the model so far." + } + } + }, + "ToolSearchCall": { + "type": "object", + "description": "A tool search call output item.", + "required": [ + "id", + "execution", + "arguments", + "status" + ], + "properties": { + "arguments": { + "description": "Arguments used for the tool search call." + }, + "call_id": { + "type": [ + "string", + "null" + ], + "description": "The unique ID of the tool search call generated by the model." + }, + "created_by": { + "type": [ + "string", + "null" + ], + "description": "The identifier of the actor that created the item." + }, + "execution": { + "$ref": "#/components/schemas/ToolSearchExecutionType", + "description": "Whether tool search was executed by the server or by the client." + }, + "id": { + "type": "string", + "description": "The unique ID of the tool search call item." + }, + "status": { + "$ref": "#/components/schemas/FunctionCallStatus", + "description": "The status of the tool search call item." + } + } + }, + "ToolSearchCallItemParam": { + "type": "object", + "description": "A tool search call input item.", + "properties": { + "arguments": { + "description": "The arguments supplied to the tool search call." + }, + "call_id": { + "type": [ + "string", + "null" + ], + "description": "The unique ID of the tool search call generated by the model." + }, + "execution": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/ToolSearchExecutionType", + "description": "Whether tool search was executed by the server or by the client." + } + ] + }, + "id": { + "type": [ + "string", + "null" + ], + "description": "The unique ID of this tool search call." + }, + "status": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/OutputStatus", + "description": "The status of the tool search call." + } + ] + } + } + }, + "ToolSearchExecutionType": { + "type": "string", + "description": "Whether tool search was executed by the server or by the client.", + "enum": [ + "server", + "client" + ] + }, + "ToolSearchOutput": { + "type": "object", + "description": "A tool search output item.", + "required": [ + "id", + "execution", + "tools", + "status" + ], + "properties": { + "call_id": { + "type": [ + "string", + "null" + ], + "description": "The unique ID of the tool search call generated by the model." + }, + "created_by": { + "type": [ + "string", + "null" + ], + "description": "The identifier of the actor that created the item." + }, + "execution": { + "$ref": "#/components/schemas/ToolSearchExecutionType", + "description": "Whether tool search was executed by the server or by the client." + }, + "id": { + "type": "string", + "description": "The unique ID of the tool search output item." + }, + "status": { + "$ref": "#/components/schemas/FunctionCallOutputStatusEnum", + "description": "The status of the tool search output item." + }, + "tools": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Tool" + }, + "description": "The loaded tool definitions returned by tool search." + } + } + }, + "ToolSearchOutputItemParam": { + "type": "object", + "description": "A tool search output input item.", + "required": [ + "tools" + ], + "properties": { + "call_id": { + "type": [ + "string", + "null" + ], + "description": "The unique ID of the tool search call generated by the model." + }, + "execution": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/ToolSearchExecutionType", + "description": "Whether tool search was executed by the server or by the client." + } + ] + }, + "id": { + "type": [ + "string", + "null" + ], + "description": "The unique ID of this tool search output." + }, + "status": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/OutputStatus", + "description": "The status of the tool search output." + } + ] + }, + "tools": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Tool" + }, + "description": "The loaded tool definitions returned by the tool search output." + } + } + }, + "ToolSearchToolParam": { + "type": "object", + "description": "Hosted or BYOT tool search configuration for deferred tools.", + "properties": { + "description": { + "type": [ + "string", + "null" + ], + "description": "Description shown to the model for a client-executed tool search tool." + }, + "execution": { + "oneOf": [ + { + "type": "null" + }, + { + "$ref": "#/components/schemas/ToolSearchExecutionType", + "description": "Whether tool search is executed by the server or by the client." + } + ] + }, + "parameters": { + "description": "Parameter schema for a client-executed tool search tool." + } + } + }, + "TypeParam": { + "type": "object", + "description": "A typing (text entry) action.", + "required": [ + "text" + ], + "properties": { + "text": { + "type": "string", + "description": "The text to type." + } + } } } }, From 839737fa49dd7b76ef692a2edb6f668bbc882533 Mon Sep 17 00:00:00 2001 From: Spice Schema Bot Date: Thu, 15 Oct 2026 02:50:35 +0000 Subject: [PATCH 2/2] chore: update API docs --- website/docs/api/HTTP/get-iceberg-namespaces.api.mdx | 2 +- website/docs/api/HTTP/get-namespace.api.mdx | 2 +- website/docs/api/HTTP/get-table.api.mdx | 2 +- website/docs/api/HTTP/post-chat-completions.api.mdx | 2 +- website/docs/api/HTTP/post-decisions.api.mdx | 2 +- website/docs/api/HTTP/post-nsql.api.mdx | 2 +- website/docs/api/HTTP/post-responses.api.mdx | 2 +- website/docs/api/HTTP/post-sql.api.mdx | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/website/docs/api/HTTP/get-iceberg-namespaces.api.mdx b/website/docs/api/HTTP/get-iceberg-namespaces.api.mdx index 5f657f314..25fe10ef1 100644 --- a/website/docs/api/HTTP/get-iceberg-namespaces.api.mdx +++ b/website/docs/api/HTTP/get-iceberg-namespaces.api.mdx @@ -5,7 +5,7 @@ description: "This endpoint retrieves namespaces available in the Iceberg catalo sidebar_label: "List Iceberg namespaces" hide_title: true hide_table_of_contents: true -api: eJztV9tuGzcQ/RWCz7Ikuw7Q6s1NnNZAqgCx/KQKMrU7q2XKJRmSq9gQ9O+ZWe4VWjgBUqAo4CdJc+OcmcPR8MiD2Hu+WPO7BHbg9nwz4Sn4xEkbpNF8wVe59Ax0ao3UgTkITsIBPNOiAG9Fgl/FQUgldgqY1CzkwOpgLBFBKLOf/q3vMibYoxUOdHjsfBnGts4cZArphMnAvkqlmJI+VHGSXKq0f1KpU3CVyltIZCYhZTHolE+4seAEpX2XYuJ7CFsZE9l2IdAMHfBnAEfAj5x0aB7DoFoS6i8luGd+Xguoj+tByJwp2NdcJjkLpi3QWe6UoIMvpXSA2WVCeZhwn+RQCL448vBsKQuz+wxJGJiuKbXgqTNYKoQYJMJAlyjufIVzgnKWAYq+3GNGes9Pp9OEBxkUyZZNXije0GneGu1j3Kv5nD6G0JddExqIKfNlggKflUrRwYnRgWqIzsJaJZOqGbPPniIcfxBsr1VniHu678P+L0o5Jvaf6uJy1MKTKCzph2DWbQprXl+areCb02REvuMNb7aXaLI5VcdejzXtd5EyQg8+/FvtAeeMOy9gFH/HF/F6sQeUVlaUUQrnsSppFwrHDuzBoXlmXCFCFP1yhYJCalmUBV/MsQJN9PNu1eedKbAdmrzXfGnuyyRvW3b7lECs4aRWrWi89cVY2k+xsn3pPbgDzpwH3Y7EvvYOkTgtFFmBu20q2TCmnpqVfEWJ9unUV44pGpLVBgOmtc1pS4SpHISSvfnU40ldpHGEsTnItlPDu+sXhgXTJrDM4Nh+5d8r/3r86xjS/P2z1NBWgXyBJ9nn4Qu1ach4XZPxzdgQbFAzX8FmMZtXOr7SsT8Oa47EXFjltmDv3m/v3/55+9fNdvlxtX3/8WH5ruPlWPoNJd/U87HqQ8hNvY9Wy2fI8cfscDkbLKWRnHEVKJ1CkzwEu5jNlEmEyo0Pi1/nv83PVtIPpGYprmPK2II20xhpyt4ancl96QCX6pCzx4sLivg45bTweUhKJ8NzdZ6wcvsP0PcN6aTOTMWOuqSu1EEWMLoNe4v9xSWjNcF7BLTrLNrF+gYh5nBxNaXk8aajJe7tbqjBQhH8GBgF0/lFqX0gypDOIv5C6F7UD/RGaN4Zg0oOkjx21/z/9JKpKRbgKcysEvgkwSJUtDjWDFrzwyUaDrdlogmpjsed8PDg1OlE4viYoU6n0hO67gHyQrF+7qkziqAiWffSwhWkJKOKkQfhZNVuYiFCAZESSTDp6HWT0OToeZ0NbYrS3rY/blc4F74BTQwxlw== +api: eJztV99vGzcM/lcEPl9sJ0uB7d7SNt0MdC7QOE+e4cg62sdOJ6mSzklg3P9e8H74zrORFuiAYUCeEpAi9X3kdzS1hyi3AdIFTBWu0W9hmUCGQXlykayBFOY5BYEmc5ZMFB6jJ9xhEEYWGJxUGITcSdJyrVGQETFH0SYTSkap7Xb0l5luhBQPTno08aGPFRSE83ZHGWaJoCgeSWuhKcQ6j8pJZ8ObSpOhr13BoaINYSaapCNIwDr0kmFPM0hhi3FFDZBVnwIScNLLAiN6Jr4H9kEKTRpIgJj11xL9M5zWAtvrBhQ23hbiMSeVi2gPBTrBzgA9fi3JYwbpRuqACQSVYyEh3UN8dozCrr+gikdHFwwtBu6M80wxEgYOacx9rPReMmaKWAztIXoyW6iqKoFIUbNt1uGCqlrybcFZE5q8V5MJ/zmmPuub0FHMRCiVwhA2pdZ8sbImcg3TPUjnNKm6GeMvgTPsf5DsoFUnjAe+79P+L0p5zhw+t8WFKgF8koVj/zGZxQHCAtqPZiVhWSVn7GvodLO6hGW1rOprr8817a3MBLPHEP+t9qD31p8WsDF/J7bAEOQWIWlOMaIMT3PV1j4VmYhb9JDAxvpCxsb0yxUkUJChoiwgnVTJIftpt9r7ThwJoOHoBczsXanyQ8tunxQ2NUxa15zH29D8Vmafm8oOrXfod6Tw3hxG4tA7NRG9kZpPob/tKtkppp2atX3OQIdyGjrPOTqRtQeOlHZozqFEMDU7qWkwnwY6aYt0nmHTnOvJpOp0d/3CsBDGRrGxpcle9feqv4H+eoV0P/8is7xV2CjwiYY6fKE2nRivWzG+OTcEO9Yi1LRFg+ZVjq9yHI7DViMNFlGHpeL9h9Xduz9u/7xZzT7NVx8+3c/e97o8B7+T5Jt2PtZ9iLlt99F6+Yw5pDDeXY6PltJGnM0qUHoNKeQxunQ81lZJndsQ018nv01OVtKP7BYZ7lBbV/Bm2mQaiXfWbGhbehSPFHPxcHHBGR9GwAtfQFV6is/1fdLR6m/k/5fsI7OxtTrakvrSRCrw7DYcHCnMRH9Ek0LeddLDYn3jpMrx4mrE4ClDE3lv98eeKgGm3yS+Gk1Gk4vShMiSYZ+zIRbSDLJ+5DdC9844quQRyH3/mf+fXjKtxCI+xbHTkgwXoZbFvlXQAnaXkPxjW2aZsGu/X8uA915XFZubxwx3OqPA7PoHyAvF+rmnzlkGtcj6l9ZO6pIP1YrcSU91u1mFCeQoMxbJYt9G3SieHIOok6HNWQ5f2++3c6iqb00MMZc= sidebar_class_name: "get api-method" info_path: docs/api/HTTP/runtime custom_edit_url: null diff --git a/website/docs/api/HTTP/get-namespace.api.mdx b/website/docs/api/HTTP/get-namespace.api.mdx index 68b62a620..ec2bcb863 100644 --- a/website/docs/api/HTTP/get-namespace.api.mdx +++ b/website/docs/api/HTTP/get-namespace.api.mdx @@ -5,7 +5,7 @@ description: "Returns the namespace if it exists. Spice does not store namespace sidebar_label: "Load an Iceberg namespace" hide_title: true hide_table_of_contents: true -api: eJy9VE1P4zAQ/SuWz/0CcdjtDa0QQkKrFbCnLqJuMm0Mjm3sSaGK8t93xg1JWqpd7WVPccbz+d7z1BLVJsr5Qt5ksIKwkY8jmUPMgvaonZVzeQdYBRsFFiCsKiF6lYHQa6FRwLuOGCfi3muy5Q6isA5FRBeGzj44DwE1xJGITiz7/6XQUSxtZcxyIkeSzYrr3uRUeQP41CWh20AnZyNQv7U8n834c9jr967kvjMKypxFsMi+ynujs5R/+hw5oJYxK6BUfMKdB0rhVs+QoTxG4YGmbyESd1f3D2J5DdiVu2s7S0MEeK10gJxR7dsnXPuxuV5/daL4MIdXgSb5FL8397EqBLWjUI1QDu0Rg7Yb2TTNSKJGA0OcZHOcdh+16Fthcj6r4tK8qd0HdfN/EYCyedJS9JD9siq+RKFEhLCFIN40Fq5Cvi8FOhGS9toqgqRRkBMWikx1k8BWea65JWV+nBijG76bcpdG/ws8p6jlHPCuSm/giL2FjDw9NeOrFQnsmCpuvkn5L05p9sZuldH5AK21C6VCmQIu/iTyDu+kdsklSiAE28fDHRFk9DPdnk27/HFad+eGfPbY8xKoZRUMuReIfj6dGpcpU7iI8y+zr7NPT+KWr0UOWzDOl/TGWhYn4puza72pSAJMqFiOx5yR+GoeuVxWBY27VE95/fQCfH7kO23XLnHTEhEqi7qEk68xgZ6L3oWgByaqZYdFSiMWMD6fcPM6pxb1WkM4vCHQePx9YjJMZuPKRlQrs38dNH+p7CDrrVM5qbhbB8MVddBm3S+f/7pFW2UjvOPUG6Utz5GYrVtBLOT2jJ92Jwn6mR/sKqad/ep6pSL8DKRgNr9WEBJbBJoKOoHE3FEAqJyhJVITofIyy8CzBkneVVpQx+uXGe/0en31QAL+DQXUSuI= +api: eJy9VEtv2zAM/isCz86jRQ+bb8NQFAWKYWi7UxY0jM3EamVJlei0geH/PlDxnEeDDbvsZFkUX9/3kS0wriPkM7gtaElhDfMMSopF0J61s5DDPXETbFRckbJYU/RYkNIrpVnRu44cx+rB64JU6Sgq61hFduHwsQ/OU2BNMVPRqcX+f6F0VAvbGLMYQwZyjZL3toQc1sRPQxDIIFD0zkaKkLdwOZ3K57jWb0PKXWWQQeEsk2V5i94bXaT4k+coDi3EoqIa5cRbT5CDWz5TwXCKwmNFqodI3V8/PKrFDfGQ7r6vLDUR6LXRgUpBdV/+PIN925JvbzqT/DCGx8Dxo//ueu+LIeAWMtBM9eF95KDtGrquy4A1GzrECbrTsDuv2b4UIeejKr6YN9z+pi7/FwGgLZOWoqfip8X4EhWqSGFDQb1prlzDYq8VOxWS9vosKiBXFBRXaNWi7RLYWJZaSkLz/UwbQ/NDl9vU+l/gOUetxKB3rL2hE/ZmEKV7yMA3S6OLU6qk+C7Fvzqn2Vu7QaPLA7RWLtTIkByu/iTyAe+kdpAUNXHl+uGRipAryGGyuZgM8eOkHc4dZLDDXpZAC00wkEPF7PPJxLgCTeUi55+mn6cfRuJOzKqkDRnna7LcszhWX51d6XUTKBGqFqORRFyMoZtLuqIJmrcpH3r99EJynotN25VL3PREhMayrunsNCbQS7V/YnRBQlTPjojUY1HR6HIsxeuSLOuVpnBs6TKQ9neBL8fT8XTU2Mi4NLvpcJFrtAdR7xyWCu2wDg5X1FGZ7X75/Nct2iub6Z0n3qC20kditu0FMYPNhYz2IAnIID/aVUK7vGvbJUb6EUzXyfVrQyGxlcEGg04gCXcZVISlQDtrIREKX4qCvGhwg6ZJC+p0/Qrjg15vrh+h634BBdRK4g== sidebar_class_name: "get api-method" info_path: docs/api/HTTP/runtime custom_edit_url: null diff --git a/website/docs/api/HTTP/get-table.api.mdx b/website/docs/api/HTTP/get-table.api.mdx index 526921dd4..a6d9fa3e5 100644 --- a/website/docs/api/HTTP/get-table.api.mdx +++ b/website/docs/api/HTTP/get-table.api.mdx @@ -5,7 +5,7 @@ description: "A table Spice reads unchanged from an Iceberg table (a federated ` sidebar_label: "Load a table." hide_title: true hide_table_of_contents: true -api: eJztWFtv2zYU/isE95AU8K1tBmzCMCBb065AUKyJ+5QEFSPRFluJVEkqFxj+7/sOKcly7CYP3dOWJ8vkuZ/vXKQV92LpeHLB32fyWtolvxrxXLrMqtoro3nCj5kX16Vk57XKJLNS5I41OiuEXsqcLaypmNCsZW9pDwVbyFxa4UGSqniXpJfaWJYuy0YmKcuFF076ERMtk9JDQaB8B0KWgaw0yxEdDK7fvDm91IHvBVMOZvnGaigTjvlC+G17Eqa8Y1ljrdSeVdILUg5xef/nUpcGquDyiJVG5J1rgTGawIxm8kbae2j71kgH050Z2pSVCvIvdYyRLyRzWtSuMD4G78AxLe88A3MQAqoJO2aZKZsKvuek1JvAGMxGuBrvVD6IfVbIKDnqYvDU6EyO2G2h+hx9lbJuqYLo8NxGixUiB7HU8IzdCorcUjkvLXQ32quSzkNAYxRgoL5nBgJsZ9ShyDJZxuRCsfJFryfqz0xVNx6GuiYrKCOyupZ5rvTSUbZvlLyN6bzUzjQWHCFl0KpNn7k2rYvGwbKgJD2azdIR06KCpOAeAuKMTmJALzV5RITnH09xbU2zLFqLlIaLIp/wETc1WY48v88B7qX0n4NbuKmFFYCDtFQPKw49EhT042qREYWieqiFL/jDIpnDmp6SmcUmiaST8KIQYZ5428gRd0hjJXiy4v6+JiXOW/jE1+tRr7ez6mmdP6DuiohdbbSTju5fzWb0s6tnu7yHraDXHOoF2jOjPaBJckRdlypW1fSLI2GrXWPM9ReZ+b3edVrPTs7nLD0FIOek6Uy6pvRpstGNytqqagDcyohkYMwbS0D+YFgK4xZqmRL6UjoXSznOcAuDlSgdZIqutB64dwBJC9SYixijvmBuNRswb4f+gncWUUutLeHOqxjm/ubJKGzHveND45GSpb8V3tcumU7bBjsRNTWIibHLqatlNv0psI07tt/TCV+Peu3jruNtzLjooDHiuilLfgVEcq98SSYO4x8gAwDR/dH3QBONzoSmsr6OgKF28HBc/AhohgGX1hq7G+14/AQvStcBDDgNVGRRLndlhdONKAWrl9KCfGFsJXw8ev0KB2hSqmoqnsxCyKP03RJs9e1cjLjUxH3BP5hztNEPXXM5uctkDPKovQo5GR7/IfKzOKGGp+fS3gAon7S4Eap8yPMenlgtSqKS9qSLZJf7Nl/hfE6GDoExvNx30eGlJYBrd6KqS7mVnD5E/C3Mi5OQRlCLogNHPWdSN9cABxCO5cId7ANT0g6wrSGFOR17ltDuFpxhYiClmxnfkyMcDD9h3mHH+c6Cs7VjxIZBe4KOGM+BqsyX9xP2MYz6JwcTxiGizv6az/9mh+n05uXUfSvTF9SmjhGgW/a2VMvCk4AJO5dwsiv9EBahQs3nJnNTUaspyZlitI278mqxtR8YEdOo4nVXz0d76jm4nRsZh7S8w9LwXLfPdTuo2/kjhboDnDZq34lEB8mjFpI/z14/MmIw/ftSbFf1zDRlzjZzBzjMn+H6v4JrRA6WncK0m37Y8bFIJ5w6bL+uu+mqf15PA6JwFH7XYHHB1PhO0NgS3NR70XppfSoL43zyy+zX2c7qdkrXLMcbY2nqijbKKGnC/gxLaIMNNb7XjMckkZazK1KH91Tl74M+NPPPXyU9X9Gd0gsTctg6bumNrZJ7d+dQhjnbkADtkpa2pH/FOA7r4vjVhIxXYY1dKMBs6wYxJPejYBxMZuMGQysMFtzV8L8SeiCV1sTunX7y0LTVpgSfPyw8f1j4L31YaBurRyKmdSnw3o7yCA1j1badC37zkt6s+saDP8nw+0LsPXQa6wslT/2FOFera4D6ky3XazoOhlFbQHUKqwI1NYxcOXpGw1vgjVQ+Un2HZ+1YesEe/3ix16/2UOh7ThagnvAPj6FZDb6Z0AeNH7Lp3zCnbVZXICyQLOpwCFW8O85oOA24dvYCarz9FHl3Msdk+QdZBWj5 +api: eJztWN1v2zYQ/1cO3ENSQP5omgGbMAzI1rQrUBRr4j7FQc2QZ4ktRaokZScw9L8PR0q2HKfJQ/e05ckyj/fB+/jdkRsWeOFZfsXeCbxBV7DrjEn0wqk6KGtYzs4g8BuNcFkrgeCQSw+NESU3BUpYOlsBN9Cxd3uPOSxRouMBJSxUouWLubEOFoVuMF+A5IF7DBnwjkmZoSDr4K1uEAQPXNsio4UB+fXr93MT+V6A8uAwNM6gBO4hlDzs25ODCh5E4xyaABUGTsqBG7n9MzfaCk5HzkBbLvujRcZkAlgDuEJ3Bw6/NehDBt4ObRJaoQlzk3wUSgRveO1LG5LzjjwYvA3wrUlCuPRjOANhdVMZ4JKUBhsZo9lzY5vglRz4XpSYJCddwANYIzCDdam2MfqKWHe7ouj43XkLSi5hXaIBFWDNyXOF8gEdSmhMUJrWo0OTF8ZwZu7AhhJdb9QxFwJ1Cm4GaxXKrZ6kX9iqbgJ68I0oKSJY3aCUyhSeor1SuE7hnBtvGycwhUx5MHYbuS6sy8ajTEoWp9PpIgPDK2WKeDyH3FuTJ4fODZ2INl5+fA+hdLYpys4iZXxALscsY7Ymy5U17yTLWYHhczwWy1jNHa8woKN62DDDK2R5/PE1F7RDUT3UPJTsfpHMSoTtTrDLXRBJJ+WLcihZHlyDGfOixIqzfMPCXU1KfHDKFKxts63e3qqndf6Aumva7GtrPHqin0yn9HOoZ7+8h1Cw1RzrhWVMWBPQBJLD61qrVFWTL56EbQ6NsTdfUIQHT9drvTi/nMHiveVyRpou0Dc6LPKd7iO/X9XrEh2mTJ4bH6yjRP5gYSGsWapiQdm3oHVe4Eg4lGiC4tovcuB9ad073pGfm6XS6FOOES7YtYEB877rr1hvEUFq7Sjvgkpu3lKe9MK+33u+DDwiLH4rQ6h9Ppl0ADvmNQHE2Lpi4msUk58i26hn+30xZm221T7qEW9nxlWfGhkzjdbsum0zFlTQZOLQ/zFlWNsS/fR7SZOMFtxQWd+khCE4uN8ufiRphg5H56w79HZafoK3Qu95QabEXWSRxENZcXUnSpmABTqWsaV1FQ9p6dUJy1iljKqaiuXT6PIk/bAEO30HhIyhIe4r9sFeNqL80IPL+a3A5OSsI8WYDJf/4PIidajh6iW6lRL4yfAVV/o+zzsT0BmuaRe6896Tfey7eMX1GRk6TIwh8SFCny/dhozhLa9qjXvB2bqIveFKp05ILajLoiNPmDOumxutxNg6ic4fPZRMedfA9pqUtx1mcePX6HzsGAr9rsdvtytrwPHU70puvjPg7M0YCTBoTjApx6VyKIK+G8PH2OqfbEwZ2BU6+Gs2+xuOF5PVy4n/phcvCKbOnLNreKNVUQYSMIZLxBz60o9u4SrWvLTCT3itJiRnUmAY9eXV5dbDiZFy+nQ6bft6Pn2gnuOxpcXUpPFW+fBct891O6jb2SOFepA4nde+44k+JU+7lPx5+uqRFnPkd6XYjerCNlrCru+IEuVzuv6v0jVlToWhtN2kH2f8ULKcEcJux3U/2Wy/20nMKD/ZxN+WZcxHU9OdoHGa5YywN59MaHzSpfUh/2X66/RgdHtPZJC4Qm3riibKJGkMf8YhtHHY3WtGI5JIw9k1qRONU+Eu6uO1+vwV6fuaaMosbYxhd3BHN7YKH5ydYxlK2G3RSiANbfn2inEWx8XRyZiMV3GMXSp0+5Q2Y3T8JPhkPB1PR43xqbG0GautDxU3A6k0JvZ3+vF90za7Enx+WHh+WPgvPSx0wBrwNkxqzZWh8oiAselg54qtXtLNags8LGP58H0hYQ+tpvq6zhjhC3FuNjfc4yen25aWo2EECxlbcafibgIMqTx9S5Yvufb4SPUdX3Rt6QU8/njx4Lm6RW7uGFmgG/rHMhbBavBmQg8aP2TTv2FOB1bXbcZK5JIQ7mrT0c4ENacB18FcQMC77SJvz2esbf8BWQVo+Q== sidebar_class_name: "get api-method" info_path: docs/api/HTTP/runtime custom_edit_url: null diff --git a/website/docs/api/HTTP/post-chat-completions.api.mdx b/website/docs/api/HTTP/post-chat-completions.api.mdx index e05e3bf50..bcf4aa56f 100644 --- a/website/docs/api/HTTP/post-chat-completions.api.mdx +++ b/website/docs/api/HTTP/post-chat-completions.api.mdx @@ -5,7 +5,7 @@ description: "Creates a model response for the given chat conversation." sidebar_label: "Create Chat Completion" hide_title: true hide_table_of_contents: true -api: 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 +api: eJztfWtzHDeS4F/B1cSFzbnqJiVrPDY3LjZoydrRnm0pTHEce2xHN7oK3Y1RNVADVJFqK/jfLzITQKEe/aJIr2+C82EsduGZSCTynZ+Sii9tcn6dXLxJfk2TXNjMyLKSWiXnyUsjeCUs42ytc1EwI2yplRVsoQ2rVoIt5Y1QLFvximVa3QhjOXQdJ2miS2Hwjzd5cp6U2lZTaDfN9LosBHywSZoY8c9a2Oo7nW+S80+D0zPuJ/AdmevFaivVknFWcLWs+VLQMmH2TKtKqArG5GVZyAyXcvoPCwN/Smy2EmsO/6o2pUjOEz3/h8gqtyBpRA4gWQtr+VLAOnFgAFBpYGOVFBbHrnOp4R9aibeL5Pw6DKjqokju0u6W3nHD16ISxiIMsT/TdVXW1Zj97OZmtyuhWt+YtH7T8FlWq4marXXOCwlLOWfXE1rLJPl1NmbXPwhuFFtrI379clVVpT0/PS0LXi20WY91KRSX40yvT3Od2dNlLXNhT7H/CQBvF0xutMxEkiYwEq/6EHG/987yshSZXEhhEW/crmiL1GXMfqxtxeaCaSWYXrDZLb+ZpWzGeQb/WZdfwX8WBf2py9rOUqYNm5XZ+tnXs2jhtjJSLZM0Eapew6Jv+U2SJpxncJLlV7D8Av+AUZI0wRFgL5WsChjh5YpXLwO+XcAyX9PG7lIHgt4O368Ew0+4Q7owtYUNa3dx8jG7rMtSGzjEeS2LaiQV9bGMG8FmvCj0BjdtV7N0omZzXhQ8h18ybXgB/xDZSiMk+LwQ8A+lbziCRG0+wn8BZ/G/K7leC4PA40aqWcq4ytksEzk3CK8e1vYghwtKfgVE3trErnY3oD3sboO7290E9r27BUJkdxOA1e4WAMXdLQC+e1oQ5FuNBm+TrlbQrHuJ6Ofz7gR3d3e7cfTviJl3dzsbJXe/3qXJAsmJyjZToAZFtWmmu05UvZ4Lk6RExX4Nt/08WRSawybaqP8TtmdzUd0Kodjo+fgMUe35+GzM3mkrK3kj2A0vamEZzid/E0yJW1bpD0JZNudW5EyriapWQhomPkpbAW0Py2RS4b2qxMeKWc0W3KQsF5kRHB+BcOe+sBNVyA+ikCutc7p8peAVtrB8LVghlWA3wsx5JddjuNGLWmWwlWnGi+IYcv5KlEZkHO6zVGzBb7RB0lVpXUyzFRzHbDxRE/VSq8rowrLblcxW7Eu5YFxtTpifGQg8TA6EYdNsZjxRM6WVmLG14MpGlOVWFgVTusJejDcDAdylspXgOVsKBY8wveD0mMGIvK50f8SMK1bK7EM4RtebnljXHQguzEg/+knHE0X0fUO/l9xUMqsLbpp13UjOZp8mieJrMUnO2SRZb6b+6yS5m8E7kIl4RZWm3VXw/EdzBaBIap2LBa+Lip5NpUNTIqqlEVaoaszcvjud5GJL+530sU/6acm5FnboWIj0umcAnwRYg1D5qLbCjFsUSm2hLtvm7B0cV2HkLecVk++60sOEqj3f6+2nI5h1r3vemiKmdK/d731iF74McGMPugTAvP70+OsQqd1BbP2SXwK5IHLqUSgmo9wYvomoqKzE2u5jOnE9aVIGRrG/5BZUmukCovj52tC7YNHfQKVuV44qhjsK2JsC09KmQgjnldZWOM5U5Wylb1vgb4B+l26B6RAGQ0tYS2sZlQY2kMhhwxby0W8puxj935Sdjb5Fzg+YfC4Vq1UujM20AUKncpZzu4KNAJ8MpIt/lOt6zQqhltUKZvv6BS4zgvEgN9d8b63PMp5loqxs6iA6FznjQGP/8/LtT+wSZQtGhztml4IYwmtksw9nx+GhG3kSrNWpn33krvMJChDiIwektERfcJ54EUYshBEqi+YFEWhE8s9Ym+UpAa/iKpdqOYq+ntIMuc7qtVAVp9dlrmuHNMS1AzV+u5YVPhOzBmIzILBS4dMTDpYORDGxLqtNA15WSFuNd/Atr8Ptuusi0a4X2NLbe4Hjw6/NCTa4veab8E7SAUpV1hXKZ2PEWT9Bcl6ZWtylSaGXsprOJW/d9nCbh6/fjzqXC7pUEXuiFxHhcswQL0sB/PrS8zyN5Ev7IexjnMFpOUSjR3LNS+uH+bIZmC6zNPSJvXkVuCn4W/4mzAlcOq4Yt1ZnEsEJ+yOejS2MXrPRs7MzaPXs7Gw8UT/yCpCkkoCOmxRHwx7SMp7nuBvaLADLBhB3KEtpJKgSNHBmJaD1eKLg6omPPKuYWCxga8jr3HCzYaUw1DFl87ryHGXgO5/hLXjG7ErXRe7ZQ2RapHL/7gBfFAJR4t8myo0GDWiz2sBm/WhGWOQXFONszhXD25cVtQXeNozjiZkRhbjhqiIQAyLxPJfQghfvWtTcEUmpKrFEpjsw21JVXz1HQkUdNj/xdatPeKwQJ0uj5y2MnGtdCK62ouQvKwGCBvHIVW0UHBaDYfhckmbBb8cJ7A61tAEeZ8zeLBhciXSiqL/1J94fRPBs1RrFTUn3FrrNnM5mhvfX8ZszJNRr/jHSG01pFfFOG+D1JBYCYu8xVKwuAZvmulZ50GeR4IObpp3irQIGay4iFEbVTXQtU0CvogYKOlE30sp50QUZIOY1YKBWKK7gr4e/BqEnKmjWUsGLlpyfOeA8AESQn3QvZQOG60MWGlORQXhJEuy6erwxe7+Snsa4Tsh8AGNBAhO7zrStovmjaXkpT0sjM6mW7q1C4bCZFkSOi3dvkKSEeSTw57cs3/JuDKKa05xIO1HI2+t1ySs8ZHzRrvXICgOIjrTp3sfafWq6B+3VkQ0B8Bxm4CwbiYUXRVt2GeQ2vZ60x2NGCtQ+nriPgTrk4kYUGomzkzJ3CE+RqPHZy4cD768dfx2kksPsxc+kWf2R1v6SNveOm+o9DLRPh4Pf+mvAHttVRLRyEDK2ixluXa88dPsLTHYIKbt799n0/QKEYrqkF4z4dk81SdyXJQcp+53RN4Db0SMvFdEex9vncoFcaQV8Rni8o0ECXqG6xuhC7GIOt+xz77nBuP1zw193nFtAdXd46e970+zGVmJ9yDUbou9IH/cN+XQ/j7yflwjAocs5cIMQpAB6dwyI99aLqiQz5QxWNWavtemcjk2ZVsUGv7MZrBH1WdZbFcbJvVb7L0cMWpt8JEpAJ/PfQwZQtfeQRODp9m+7/QefrFzzpZjWZsBM3Hzao/wb7J2LisujzBJtYyv1ZwW8XP68cUVj1tiJvRR2/Xdp4Woeqa26wV6nhb4daTNayeVqtJC5KGS1GeFco5ae6WSXtRY10iDR3iZpAkMBghu5lIoXsZH2DYz7ioCDStg2gLdcge8lyrycXf38QwsazBEwsEV9/YIJlWlQY9C3nFe8TXdw9itT3Adzse8joW6Ehvvxtw0awgZS8V2TbZ50YfdxImhdDRhlSs4S/csRfdxzPeAUdvge4Oe9CPBd+3xpn+58063+C++DytMjzcAA7GVt4C0rNv5JtmwC3geTBAXICXgfTJL9rgrgpBBjOoCo5YVwN/TxPqjoOj4OKsbHfhwxXcihJxl/HcCRfqtpGxf2sjPv+xcfhsFjdRYRNH2U3AZzMzZwWk7kbSYKrQA0FWETLEXmRy7kzSvAMQ4qqkLzsJZKw0LA0oCADRMcybn1zC6yEAdvEe0cExW2GCHca1mIt3Qi98BD6P1IaEi4dBArf2WHpezPZOQbrx/ima1je4PfAz29COEDaC1pmU7YXMA5eY1ZMGKQ+pk89cbsJVfBUAZsTUovGhrQYhp/gOjQh86/nOAQbfGRxAZg3Q+hhp/paPiKV9w95RxcGm6krq078MaNE+w6sbPJIzoOynzg6c/3P9dXSv4T1LY5HPVCCuO07wfuaf+RX1grgS/1RClykopkskPhPiStcT9DELMaV89aFcJa7zHEi8LO0Kmx5ZJEQr435z0JfH8Mgc+IRW35gMDmPxzkAeEaBwerYUPpAXjch9fPbh2PA7Kw/YNe1u4te8jn9SWZjtBv2JA0C1je6MhSMtbyDDhz515Mn90mZge8flt20Pb/+RwPQvIQKwue0eHHNAFMZY5tg2bcLNEpA69z5GCB5jdnrw4uNCkwbdvQajfRds5IYboBD/jw6SBsbxY+5DyEx7tjuaCkQBcN7zL+k0Z+x/kxdVzweHHLN81QYP+TOfYncx54fqx4UdSZVPA9cveB7h7H5hu20XXkyeicZ9jfYTzPcDUbk4ragxTB5mIB6Ohd8FoDPZCrFIzd4cR77mn/X/FoaZ+AHiTUdCmpw5zw+uLQzZ06yFPv2BdQ5klDDAYE2MjXcUC/0LrGsWcuesI93dV/+buaHsQSNzoC8uHSxcDA7TfMvVnvtS7cTI8iaQfEP1J1Drcmq22l11PYzoB1JPo4bCHBBgSMz7k+KAxvUVIedjLYNFDMeF14h7byd/fFr9bOh1DsJTaAo398BGvmekQ0ox3vYzw7KG/Bp/tIFu+RVADhRTpeRQ+78Q/cFsti9MZNh4TuowyNVTTfg8id7QGfhM8jfQ3g/B/J0yA+mQfwM+ivtMV+TYfo0N5jiQZ9pLtJz89xz9dwYEl0z45iYtERN/K7bvEQALo0ctiNdfOPxqMMHoVnXB73ODocxT6kaxbTC37xMQAew9GL08hg6ojj112A4Zi9EqVAg7XT0U/U0Ur6ja5BRZ82wlAQUGDTln3ZxHGfTBREoIVrlpIz+jVcwHtHjpykE3WNOv8j7Lhkzz9B5nuiyBh8vEYYnVYr7m1xh+tEnI/dKFApviQXauejjzYPYLEWsqgExkpEeQWCLwMEAs01N/nupYNb8ijqT7psh2c/+g2gIN2c1TGBXltu4VvnIY5ogEwrIMstam/w4FsRWEE2ItayyQiAQSE/als592OMYsx4ydELfRHHcZIBiGJQ23GQ52x2PcGXCFIIwIhAI2bLshq90CM80BGq3MXtLIo75IXVsdv2tV/lRN0PZ9h7HdI7OD5eOr/qBgJzXa2IvUBlWMsAYFOEIiyutiLeVsqiJAnd5zdNgnuCP/mf3Yg/Nmfeoyv3O8IxO+i4JmrHeWEYbOvI7nNgExVOjD34gU3UfU6svbH2od35TBx779aPuOM3r3abRx2BdVAjy4v+ajZmb0uhLt5MlAaaDUb9W5kLZrha4hm5k0NeqqHreIgu5iWFWCVUfahMTFS24oZnQKpsJTMXrgfBC4KVWqrKgkloQbE40TtzsBuWe20mCmInjb61pCfGSAUjGL/hskAEo4bEKnxWvMjf9C1bc7XpJWehsHfbI1kYAUTCcTCDNTohvDYQ5zV30FqChBybx5uglEaE9sE1mdHWMhCvvVBMixiz/yNEyWZqBoqq2bMZojxGVUAGAowt6QXUgG6pKEQxHdYVHhFVJRTC/NqP2ObjpFoeftu64Z9/yrRayGUNyD/y4496QaITlWMT4u5rS/rV0ohcBkXkoc/ySzcjsUhkhb1+R0OJnBEpPHxHpe85okgpC4wKkTogBUtI/lNsmFyXRt80V5ZVci0suaoUgCZOrvF2TSI8oTVg/welbxXjK0iJAM3kWrjQI6RUFtF3DSpNGBQwkRsBY7QyIKAvDN54FI3WUkEI8gpIAiI7DuTRj3j/QYl5m2S/IobQDxHAE+Q3vCIUUgjxdaB7d9vAfhCdlAX/M6dQDUF1XZe8SFswKLPu1BI88jqPUTL4SQNHyFkXJZuz1otKRGlEyHYGx+rOnLWOHM+6dcy7FRb//cqJfx0vpUGnpHeBbLmtx4qFfTpD73ffzuvQG5LYfMoBkok/WHKcW/+0rMTGhYkP5sVxwc6dvDhR6DPyCRUvPjgXIZqtlJl174Nel9U049lKTD+IzRE6jCuXPIIYKNInZNFRU94zK9cSssM4xhHpJyAdvspkkcFeK1kxTGAD7BFaxi1Fks7AjWrGFlIU+T3zndEmRzAReaSj4dHFY07FYqHNUZ4/LzW4RXKpLKPODDPV+YjfhTYTFUUAf0ao6ET1/IxFEI0xjxjyM5QurNC3mAFM5LJe+xRg4FU/A5jmYFBbwlvn1+XWDk9wE/G+4BbyNDSHCKMsxK0wHknhfk9Ua8cYKR+u+EQBs3fOgpTyl1FptBdNnFSDiPAlDI5vrHeiPnErZt1l7vKkxkQ6jrXjRQgoIEA0kQUf8b8tsc/N8T2hABIEv41p4x9+KF5chBQNtsmR1GTQ6Fqr1pDuxGUEBFHoUlBujUqz2Sc2wckofxJkf5iSgZPkpNYP5+zTeDy+Y3czx4baibqsTJ1VtQlPo89HJZStjejll1rzKlvRfYSjKCCXBNhkJ8rbVQcCSAYmOTKYxIYRAmt4CCgIypMk2jLlLihyYcgWDXtz8vREtTbtVXIBAE3uLAodd+boMbtCujqLgD2bKGmBEVoIYxwb4iREcsghNGby3gxhnHgTcIbeVPd8nzsN/cPaIvYmhDpmfdH5PMwyowEfabXuaDurjT5tZZ3jNocle3KNHz3RU3fjEl/jLRmfcnCvWEOuPJfryWUv8xfd+XXc3+jQWc1jZnpqTqO/JPoWDPadVR2S42miiAw6OEFmTyIWbmzLrlfC7MjBRMwHgC2rPk/VQGP4PfF8RemfSLKNFcEhp8t4ot5AHhwU1zDrRPcVcCLaQhcFbDBk53GTuHszUT6Pi7s5njl7Cy85Z7aewyR60YJgbFTERU7UjPaABscZLGiGOsYivDQpsAH5tsdmoh7gtWnJYF4PTLFX/2m1osUfInbEtKAjerSHJTbD8oWoNtPG2f2oa28rxIHIVd5LXStRlHihM5SUDapL8F2PsiP7FFIbuIM3UheEKsTJQ1rNGp/IUhcyk8KOvZHgzSsb+Zz6+CcarUbvfVDj+EVZUgRi2kP2C9w3UL4ISCnH7crhpsSlG8wVCfK3WEMEK89zI6wF+YZpkxPi8xstc2admQ7iAVSYbUNsaPBJ9JLCRB0nKtCxjObCVqMS9LigW/yT+7UBt3X3WIj8cNXq1y8GCCUQZsEBKeEWSMW+ExVHgL+JEoalDDkzyhDgGLYPcAKwUM/I+9xaIhB0VEFT1i5bZys8KJAAIEuqyBuZDIlqcM6cwbZmpLdunO9CbiyyRgdPTpQccMGvwqxryr1TsWXNDVeVQNdklaP2JQzUKMHZjLY2XUi1FKY0EpJDefo8UU3+ONS+KVlFCjlHjOY8+yBUviWRmxXmRmZiWrmbdr/46tLoTLiYOeAwgioKh3fEtrHVjVhDb7+AWOcvkOKquJlXhfuxXdJvAjAtmsGimdcCN2m03hlNwgYxy3bMrijEBJMK30orok5pqwtOCiGGXzhx7Ivucv3vR64Yor65IYMHKlMBiRrzSHh7KYuayEM8Umvy60UhPh6hMS/Ex1FzNidfACPxxTVmnJPVZltKqZFvEPU9PTlyx5k2jluC7cYnhpv6hRLV4iGlsVWPzcWK30BKPGkdcuAl+sXPPYtRdhalUISH1A8WWJi5zje0TMpPJobGIFeTlo4vwmg4CcazqgaCEd4TGEG08Jp0rGFmGtS9JY2FLDi00Hc4WYe2YScHZAZwwMI07uIj8s+8wKSp7uhicf6SNvserji9sZUuj7nsP+kq5lHgiAuQCyvWVeag7ZAULPrFCGgeJaC8KgFmL5ilXNZkvTAEv4t3b+iEYFkxh7aojePtQL+C8R8+zR6cAaj7mhzQXnOKl02XYab75uHqKqRjeFa6bFmCAlSNuA/vSrkEEalgiIgzJTkBEmNvKf+AKjWgV8AP1MapplkOD1xR4OIOJxdxrxOGyjpxw4/R0GHzE7g8eZ1VxB9d+jQAwfZN+SScepuRTiz+jekbYdg3P34X6EtudFmizx3KCIKvj4HzduY+XFZwbwmz0QxN/s6skEJVGNouUWJsrK9UfuMaiYEZQdJsJm7A2bOBWUiXNV7r3wC8KO8INbq6JNj9IuanF+/enF42g0xpkFNUtExt78Ofvof/TGmhTiEHCqKQafcSvxDlJXPrXBT69oCTBPofcuaiX9Cp9YOdTNTCh5dFPGXKeKG9tQinDz0afelR0gh1HoXOJ06kYUPTA8l2cueKq7wQjgj4JRDIItyZOuPObhK4W5ny1tmHkMnp7daJfIh1cH2DVRV+mVH7c0aSXS/Q2T1UUz1f1JbkkiOpinKIThOxaKCA4yQsQzmOfhue53aiDFe5XrPgtmFdftxZ1NRJuHACDRByUVTcQR2dDRScFJp0Sr6BdA7Myt9AfYFJ+WUllyFcKhMGybiVuRgBI6sg4UJV8eyDpby4kMs2WivOTyp/BzdU47j3kXLk8jwHmWyN+ejXuoa7rBdIZdAg7q450gDaxpj9l3PHwQMbOBFyo1jwwoqW5QbwYc5VfivzagWZ9eHUK1NbUj8pUd1q8wEKMHwIWXsnqieH+lTWzoYEKTwxcsEtBMXQ40lgivmNQxJelq1q9aFP9lwUEDJKAJRzdv3q7U/fg4NVcFt5TxYoyE/b4IB7qmBQu9K31rm7Q6pbEpwt5NBG9x+iJJREppImcFFNFu+Zc2Dx48eKGBCyXQ5t8Bc1fENpocH7BZ9UXIT1fawO3B9vr5oQxOnOAHQuB/KY/fnPP719//35n/+MKX4DQSFhtBLG1CW6p8L5ApMHL7gRmZDEFU7UApI1uX07QJNnB3EqHjgVL1ogapRwxFXusIXT1XWUiHiQSqyx6FTd5kSONdj+gjp7l4+aRYO6DCxpsOV6Qy77m1wC4OMM0mfjbyKZPOJqkIITfSGHlwJSJt/2uj+PukvXbaEzZMFR9xmL8yQl+OhxYNUbvQr3LrKIoeDiVulyWs7w9OHkwDkvCo5c+fpGR1g+B4uboM/RZxY2URsa5vcraxKHkWMWeRjbK+3746O9Dtc61HFbWRTcky+J0tixmnooaeuvc7ajckoonUKm8YHaKTDbeF/VFFzygRVT+m1bgsah0UztzUOtqVuRo9uddZ6f7Z8QDLA/+Od4PIYm4dP1eDz+9e5udo4HgXIrPHJglHZhRxACgBGrsBugJuxl5DQOkpivWUCWuthS01rJQGht6/O+unI6Fy5Ma2Ao/Nqvhdd4F/gwKhu5dbZyNAGrAgcT3OetIF2cO09cbKeOCl4RFM/5WjudlduUn0w1Nw9yQDU3r3U/3L+GyrR0EzR0pzhA9A9gjCRSjPBDonVBo4Hvrydnu7Jl74gSQXxB8MnKFYxoWekjfXfYAUXOADheu2dsCMdIAts6z1ouVxUrtP6A78D5RM1maJCcqOuJYqxt995BL1hMMJaimt4KKNlgwD7O7tLPGwtcKGmgifoVl7ir6hhB6D2exmHN6DgfKdyuc5WPDcFslL/chxt3sALcbNkV8cZImQfuAvdq/GxrvaLD0ggcH5j2mGHsUKFixxnD57y5r3+wMHQfVzwcfP57AvvAmO7joE19fo+Y7CGIb/PPOoiwBzb/UdaOL+6eAMPuWpzE0X5hjkwk0n18oivmsxh0qmI072+jbdmT1+CxqMhTEbKnImT/ikXIfn8/nFZQ0Jjt8cbZ44YTqinFULiXJw4bcsSJ/D3pFAa8Pb0jaDfY6Vg30B6yDbMce3POuswnj89p9IndPSl6+wHtDtpLdeMN0C4xcCiLHpXEdL56u5+KB+B/diTnvtd78danIes8Gx0mKQ3wdAFHhKIY9PGx2pvYO6TsAafIgcw9kAjA6T4sq1XmZXFniD3Gq/eq1XthhBjBvGGc39OD94ItDV+vuYnzZ1WuvER3Ma7pVq9X/31fCvcg64LdfqMq/nEIV0Kjgx7w1jZk4ADc8MNen/jNo9LAAOytK0NfcPOBIoMhOuzjzkLz0BY3vBQfY072P2j8S1pQn5F338kV8B1Q7kOcCz3IO46FTQ6mptBgU73+swWS5q55Lzs0DKsmT5Tdln8qKnw43KBNuB+L349llf6d+Azyult8GEgf0FY4dcuSEj/gjXGesgksYDFR19FCjzAw9wOJcZgRDuMcH1rP1meMfeKsCuV0qDzlfYo2uj5dC8xZN7amCRbHsFyMfNuEoo7ae9IwXpE7KhmhSozGA5s+/ug5xagoaru2JRje3kC2mDVICpjJoD15469DMzuHKBc5teLBl0XkoJ/3UJqRVWEuPCdI7Bdq3sGG03L7gtvYi2FHC8/nGMEgdhTsRopjeGJUodV5OjRmsdQbeFSdFaK2oSWat7yjk7PGaAXWbSfMkJtolBsMgUTjwwZiULM1t2hR0exs/MyZYShJVdO1k9MHXKGenf3P3jCUcsMtBUE/Uexw61mz9QEbGuZ3PybnE/j6oo1XWheJ0koC3HMJdx5m3RjNGakc+7+DYz7ZzcBNlksSV13Yo7fdo2AF4B3yIgeOCI30vqo8NLxyj8BcYwB9O1wTVj4XFWDovM4+CJR1ekGfsI/gne6M/c5JHdMOQfoScCric9So3ivK8wjX7UEX4Rth5kAVNvcMBUVnRz9GK0nBFzbymPkhNgCjnBeCL8lZHdA1A+fdKGsK2Y5XLdtzuy+xwTR/1PWACNIdYaO7+J+BEMvoTfx7ACZqz27FfGoFN9nqMKekgZuDrzSN4UxOt2KOCBsKMHsi48qndKNSexItyq4wCg2LUxyhMYEXc3Qr5iPq/u/gUgbn/b/Bm2ywSkKbeXEAcaLLFJyFjoEKeCK4Ul+wopZ7Nbn/hGwA6EGqcn3LbMmzUF+mccaGhUR8cAcjgBS6OGL/Y8dS/BmY8ouYX+L8L2mllwAGKvJlhZkWunENOzgOtyyN/ijXIGz7/rF2rbPvPbIyfksT3gw6YBSOPg6IRZ+7vI6QLqtj4vRfGyGiTAuN1BuRKQB1ysR4OWazS67Ya8OBBmWaqnJngE3mmEkxCPNWjwp6Gq7fXL5lbhRMwdxcM6HGt/KDLEUuSUMIf52+uXw7/erZ11+Pnp0MrfHqcuai+JfHaRm2AYMGGprqJS/kQhslOU0JBtHfwKBxHDCu31z8dMF852b78Asv5Vjq05bq81RyxUe+vR2EwsVaGJnx0x+0nV6opSiEnbUFsnC5fvDX6ABhs4PpvbGgco4f7z2MMThj3Aru81CbyKcrFhIhH5AYzIcCy3c6aO9AUSTnCSX1SuLC2dc+42RUxzcq85L8l8sDw5EnWdRFO3t86I1MXtzxb6Io9P9AAdC7aKN7JOYcbuiGYyrCQwzLfX52NuDu0XF5b5yubZ2BNLqoi2KTtErURC6UqGDH12RrGHJ7vp+Fc+QBVXnf3945igdxZr4hHibtxY2AiJr7AmVDWb7JrxH+hQcKv9GBpX5tff2j67Pdk2MnqZYqxygRnzZ5oKycknY1pXCO41gQ4YJAYieACt31W1r+EMMhbfA4nUFDJ9P5vsBAc6ZAtuAuJATTwzFX8siBtxXjkYLgiFalZjBnbGoEUScfNSoL2Yll4sCNAhOfw3gOq6aUXhPH9QmEoKUGW4vIWV4LcjZaFHxJ3kOUTZ+aUm8LA8bljVo7dqIjd6qlgdJHXzZc+cmWvrEHxTb6hWE/aUKQSlqFIMItcvtNuvVcInr3GnGFcoQQQ0Lo1eBgo9bYo84gzXMughaS8NwfjdcM+VR2XRE/VqkcirA/tNUXrUCCwAHgfPsZ1YH8xvvyoA5zUoCaSdhP0lEY9W7rfFMdl311x4G0ALpNNef6wwVxRNLrF67evx59w3BBzUce2yhwcyiZw2MiFfqw8igGLIowoARkbhRHZOuikmUR9BvOvioNTtqZ0watUabXc7JOdBJuYVxiVhGv0+4dyijNAI7+llIAstLDm/QoQ7tMGqSMoB8UT3sUTnAbOtq1EACG46ewJApBAg2Rz3ulS1D/9bV8Y/bWB7ymUcjhbPTtt99+Oz6bedUZqrbkUoEeOzj5kToQEr8Is4EabTiy02YCuh6kQG/AMqwCPTKFXOeePF2Mp4sRY9jRaHkXe1qVP3j07B34D7JJbDmgTW9A31llynw24LZ2fczeKGYo67HXmRsxoBvv6tKdppziFxpduedKd0WLvIcVuC0ekB0+sDCxSrp7CHFiiS1Vq54exKd7//QgPj2ITxfj6UH8Iz+IvXYoAzYQwNIXTn2yX5PdUyDtq217SKUYrpR22Hukw/UuGlKbYppJGnera9M+1WhrELRRxD/soWJC5VOvobIVN1X4iw4ER+uvqen2EJqHgoMN1xMY/+vVzz8wvw2vlYhqgbVIYrz0h1jRQprPXZJD6IMoADT1c4Dtzwira5NRunw4gIOGgdUNDxLdrytTvPS40XHc6ii3XfkRV5Y84D+OdnRBeBfITaU3QigyVjbZsKaYDOWEAk8HylkbArbzpqB8M862quv3s9UfXEge1P0lBBlO6XmA8jxpUhmuaMcDHoWuBNHuM/yOW/H1CyYUGKN8mRJ6z4ZJV9pOhrlVvzomE0VY874bMpgUTrArJT9S/YOKr0v2JeSKEJlWuSU3+VtKEyVt93hcUDWDTCXoPYXRA9ZKrDnjEgdhohUcx9nJkacYoZ9UXB2rr4o8pKbkFWYC7LqVDCyWXu/mLPffvNA2RJXigPeppN6+cnjH8PG7XzG3bvHDqO7h41cMp+SMTyXDn8oQHxG/2ZQMf5ga3Duq3frSfwOD6OYx5nW10ibw99Fbv5UbI9tsU2QVHMEhjySCyFt940SssJCn0uBPd/IPfSefSoM/lQZ/pDDyp9LgPRXP+3hz27l/zJ/MbTuEsxv+sovF7Lf0iRG2Khm31NsLWjnKPwTqIsi3IhdY/Q7yNqK/jdMkPSMPPueCc0+BfZc4gqHdLmltd8XgQuKmvpcoceHSiveFid5c4yNKRr4PZCFkcN42osPYg4Z0gjQ0jEp5hrpnK16Nm9FnLoP4/fJSv++mhw4biXNU97L2hvADDKcImQSdr83OlMNb5d004WqzJwPE4el8I2Lhc9IOp/j118slpe3lDz8+MiN0bVTa5OTsUouHbNp8iD8ztbMeYozJyyj2V6JQ/Y9WVLoDt0+jBI5ZrSTnTZg8Xa6wBJf0fMVvgFcRiq157jgqSigk1yXEijc549Zb4h1CcsX75ga96uQ6bO5RL4FvV/HrQldIjY5eWb5H8xvmDPR/DlQt7Pa4B2n7qes153C7eQRiatChX70VTHNRcVkc5ab1nRH8Qw5FK5tFeKThndl3O2lRkgiRT5uSnz3IHBSJ19ok6lfuN06HkqOihtgit8/tWofWEppKbQ+wjPe7pnbRJG66gYX8A3PWfzaE20uiHPEUatotaNkLM2zhKcZNuZUQCchlTpJUq2JghEbsb/pW3IALOViy4mpwNDLOZxvbItSoh2TZ5LzfUH+8nBMV3XTXA5+g2pQaomj1gs0lClKpU0SnrlgxhnpMlItKKeRa9srzxuxS25hlX7mL5io4xrTkAakADdwvGhzP99B3vj3vnhv/iHfTvX97QIGxgPlDLOEljnTM7BF6vMPvA6jRekLuw/pi2tre7YsPy7/eX9Ii2f+KbtvJIRh9RcLBAREQnt9phUAAF50Aa5mty2L07PlXjXc9/R6xnJEr/vmzr//616//8vz5N9+knTAKLGeQDLNUyaKcvnjx17Nv868X2Txy8gesdybBs5YB2YVRxDq6JpYCOCWMpyA7eIppnkDL88ZFY1BaaZ3zzb8nLUdoQKu0685Pnt/ALwbepkMcvh1iNc6fPe+iyvNne973/qN0lu58gs92vx9nd/i/NHkxFCOC3H5gwJ1mzWJZ30xatLvDb/+G5px3by/fs9ObZ6f+Iwq9L85eHDYuiGzwhCx0rXLo+ZehFbkAfQMJW5w5SRgD6tsMKz7nLmS1I410JKwjolraWI9zPdgyQIpH4K9FtdJwoUptkd7yapWcJwBMrBDQdAEGlSYk3EfDcQLmz/PTUwjqK1baVuffnH171qMqEBUFaW5QQQ0qSLf0MfPVNlz18dloBCPOKN2EFVmNMhIqoktJ5XqvUfkB4HIhUt/pfPN9AylnPSY6nCYLQ7Ekm6be8VnPQuUbF3opq+lccotWPSquDhFf507UTZuG7l5iIqtkzT9OB+7ZWSdAqyEEjYCG2q/m714MFzynh/dz5oDjOqFZAfWWbdg1I3hgDoOtN6y3rzQ/xQaIDmTRCuEB26OeW3YSxpvie9DdUeXzYh0OhKDFBfRai4qTXd3v0fkTICeyawP+aWmmQzQAWbcoRDGNAUG40xDHZrZ+ke6zodLVMci71Z39UL3yvv7DQEG+Zry2miZ0wfpC0V+QjZ524UMD47+a0HffpZXG/qyTlT00osyTu6Dc9rE8C0lBzlpZDfyAQ8H4nldNwNUZWSXHiphagd5vUN9lSwnm6KZJITMBLErIhppclHA8UAkd1OoxbKMvlHzB0sBQLP1sVCtKToF5E7Wt1lxFoxJ/1E263F1jjO7UA9PItyvieJ3FUt4I5R+GxgMi4sJBYgHHFqkiTyF6Ia6Tm2fIDPGqpcxAvQU8BNDk0yeIoLwyxd0d/PzPWhik32lyw43EzQI1TxMo1gEguv6UEFq7gvWj9xSJjt68QBW67yXccOpxgZzIzra/Rs8dsAxJmkARsSTkJU8Mh8B9+P/zBLjKJnED/vYpKbha1shoJTQm/O//AS8jpC4= sidebar_class_name: "post api-method" info_path: docs/api/HTTP/runtime custom_edit_url: null diff --git a/website/docs/api/HTTP/post-decisions.api.mdx b/website/docs/api/HTTP/post-decisions.api.mdx index 362621e0f..57aece326 100644 --- a/website/docs/api/HTTP/post-decisions.api.mdx +++ b/website/docs/api/HTTP/post-decisions.api.mdx @@ -5,7 +5,7 @@ description: "Answers typed questions about `input`, compatible with `OpenAI`'s sidebar_label: "Create a decision" hide_title: true hide_table_of_contents: true -api: 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 +api: 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 sidebar_class_name: "post api-method" info_path: docs/api/HTTP/runtime custom_edit_url: null diff --git a/website/docs/api/HTTP/post-nsql.api.mdx b/website/docs/api/HTTP/post-nsql.api.mdx index c839bc41b..d935a0a39 100644 --- a/website/docs/api/HTTP/post-nsql.api.mdx +++ b/website/docs/api/HTTP/post-nsql.api.mdx @@ -5,7 +5,7 @@ description: "Generate and optionally execute a natural-language text-to-SQL (NS sidebar_label: "Text-to-SQL (NSQL)" hide_title: true hide_table_of_contents: true -api: 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 +api: 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 sidebar_class_name: "post api-method" info_path: docs/api/HTTP/runtime custom_edit_url: null diff --git a/website/docs/api/HTTP/post-responses.api.mdx b/website/docs/api/HTTP/post-responses.api.mdx index 55f83f909..02745bbf4 100644 --- a/website/docs/api/HTTP/post-responses.api.mdx +++ b/website/docs/api/HTTP/post-responses.api.mdx @@ -5,7 +5,7 @@ description: "post_responses" sidebar_label: "post_responses" hide_title: true hide_table_of_contents: true -api: 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 +api: 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 sidebar_class_name: "post api-method" info_path: docs/api/HTTP/runtime custom_edit_url: null diff --git a/website/docs/api/HTTP/post-sql.api.mdx b/website/docs/api/HTTP/post-sql.api.mdx index a1bb53478..93d5404e8 100644 --- a/website/docs/api/HTTP/post-sql.api.mdx +++ b/website/docs/api/HTTP/post-sql.api.mdx @@ -5,7 +5,7 @@ description: "Execute a SQL query and return the results." sidebar_label: "SQL Query" hide_title: true hide_table_of_contents: true -api: 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 +api: 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 sidebar_class_name: "post api-method" info_path: docs/api/HTTP/runtime custom_edit_url: null