From 1e405274ba90e1baea2abc1ff20fbbcf7285d833 Mon Sep 17 00:00:00 2001 From: Arjun Natarajan Date: Mon, 12 May 2025 15:18:41 -0400 Subject: [PATCH 1/5] feat(docs): threads --- docs/docs/cloud/concepts/threads.md | 11 +- .../docs/cloud/how-tos/check_thread_status.md | 203 ------------- .../docs/cloud/how-tos/configuration_cloud.md | 4 +- docs/docs/cloud/how-tos/copy_threads.md | 134 --------- docs/docs/cloud/how-tos/create_threads.md | 234 +++++++++++++++ docs/docs/cloud/how-tos/same-thread.md | 2 +- docs/docs/cloud/how-tos/stateless_runs.md | 2 +- docs/docs/cloud/how-tos/view_threads.md | 266 ++++++++++++++++++ docs/docs/concepts/assistants.md | 4 + docs/mkdocs.yml | 4 +- libs/sdk-py/langgraph_sdk/client.py | 2 +- 11 files changed, 518 insertions(+), 348 deletions(-) delete mode 100644 docs/docs/cloud/how-tos/check_thread_status.md delete mode 100644 docs/docs/cloud/how-tos/copy_threads.md create mode 100644 docs/docs/cloud/how-tos/create_threads.md create mode 100644 docs/docs/cloud/how-tos/view_threads.md diff --git a/docs/docs/cloud/concepts/threads.md b/docs/docs/cloud/concepts/threads.md index 0d4fc5965..5df460568 100644 --- a/docs/docs/cloud/concepts/threads.md +++ b/docs/docs/cloud/concepts/threads.md @@ -1,11 +1,14 @@ # Threads -A thread contains the accumulated state of a sequence of [runs](./runs.md). If a run is executed on a thread, then the [state](../../concepts/low_level.md#state) of the underlying graph of the assistant will be persisted to the thread. +A thread contains the accumulated state of a sequence of [runs](./runs.md). When a run is executed, the [state](../../concepts/low_level.md#state) of the underlying graph of the assistant will be persisted to the thread. A thread's current and historical state can be retrieved. To persist state, a thread must be created prior to executing a run. -The state of a thread at a particular point in time is called a [checkpoint](../../concepts/persistence.md#checkpoints). Checkpoints can be used to restore the state of a thread at a later time. +The state of a thread at a particular point in time is called a [checkpoint](../../concepts/persistence.md#checkpoints). Checkpoints are persisted and can be used to restore the state of a thread at a later time. -For more on threads and checkpoints, see this section of the [LangGraph conceptual guide](../../concepts/persistence.md). -The LangGraph Cloud API provides several endpoints for creating and managing threads and thread state. See the [API reference](../../cloud/reference/api/api_ref.html#tag/threads) for more details. \ No newline at end of file + +## Learn more + +* For more on threads and checkpoints, see this section of the [LangGraph conceptual guide](../../concepts/persistence.md). +* The LangGraph Cloud API provides several endpoints for creating and managing threads and thread state. See the [API reference](../../cloud/reference/api/api_ref.html#tag/threads) for more details. \ No newline at end of file diff --git a/docs/docs/cloud/how-tos/check_thread_status.md b/docs/docs/cloud/how-tos/check_thread_status.md deleted file mode 100644 index 8e9d5f196..000000000 --- a/docs/docs/cloud/how-tos/check_thread_status.md +++ /dev/null @@ -1,203 +0,0 @@ -# Check the Status of your Threads - -## Setup - -To start, we can setup our client with whatever URL you are hosting your graph from: - -### SDK initialization - -First, we need to setup our client so that we can communicate with our hosted graph: - -=== "Python" - - ```python - from langgraph_sdk import get_client - client = get_client(url=) - # Using the graph deployed with the name "agent" - assistant_id = "agent" - thread = await client.threads.create() - ``` - -=== "Javascript" - - ```js - import { Client } from "@langchain/langgraph-sdk"; - - const client = new Client({ apiUrl: }); - // Using the graph deployed with the name "agent" - const assistantId = "agent"; - const thread = await client.threads.create(); - ``` - -=== "CURL" - - ```bash - curl --request POST \ - --url /threads \ - --header 'Content-Type: application/json' \ - --data '{}' - ``` - -## Find idle threads - -We can use the following commands to find threads that are idle, which means that all runs executed on the thread have finished running: - -=== "Python" - - ```python - print(await client.threads.search(status="idle",limit=1)) - ``` - -=== "Javascript" - - ```js - console.log(await client.threads.search({ status: "idle", limit: 1 })); - ``` - -=== "CURL" - - ```bash - curl --request POST \ - --url /threads/search \ - --header 'Content-Type: application/json' \ - --data '{"status": "idle", "limit": 1}' - ``` - -Output: - - [{'thread_id': 'cacf79bb-4248-4d01-aabc-938dbd60ed2c', - 'created_at': '2024-08-14T17:36:38.921660+00:00', - 'updated_at': '2024-08-14T17:36:38.921660+00:00', - 'metadata': {'graph_id': 'agent'}, - 'status': 'idle', - 'config': {'configurable': {}}}] - - -## Find interrupted threads - -We can use the following commands to find threads that have been interrupted in the middle of a run, which could either mean an error occurred before the run finished or a human-in-the-loop breakpoint was reached and the run is waiting to continue: - -=== "Python" - - ```python - print(await client.threads.search(status="interrupted",limit=1)) - ``` - -=== "Javascript" - - ```js - console.log(await client.threads.search({ status: "interrupted", limit: 1 })); - ``` - -=== "CURL" - - ```bash - curl --request POST \ - --url /threads/search \ - --header 'Content-Type: application/json' \ - --data '{"status": "interrupted", "limit": 1}' - ``` - -Output: - - [{'thread_id': '0d282b22-bbd5-4d95-9c61-04dcc2e302a5', - 'created_at': '2024-08-14T17:41:50.235455+00:00', - 'updated_at': '2024-08-14T17:41:50.235455+00:00', - 'metadata': {'graph_id': 'agent'}, - 'status': 'interrupted', - 'config': {'configurable': {}}}] - -## Find busy threads - -We can use the following commands to find threads that are busy, meaning they are currently handling the execution of a run: - -=== "Python" - - ```python - print(await client.threads.search(status="busy",limit=1)) - ``` - -=== "Javascript" - - ```js - console.log(await client.threads.search({ status: "busy", limit: 1 })); - ``` - -=== "CURL" - - ```bash - curl --request POST \ - --url /threads/search \ - --header 'Content-Type: application/json' \ - --data '{"status": "busy", "limit": 1}' - ``` - -Output: - - [{'thread_id': '0d282b22-bbd5-4d95-9c61-04dcc2e302a5', - 'created_at': '2024-08-14T17:41:50.235455+00:00', - 'updated_at': '2024-08-14T17:41:50.235455+00:00', - 'metadata': {'graph_id': 'agent'}, - 'status': 'busy', - 'config': {'configurable': {}}}] - -## Find specific threads - -You may also want to check the status of specific threads, which you can do in a few ways: - -### Find by ID - -You can use the `get` function to find the status of a specific thread, as long as you have the ID saved - -=== "Python" - - ```python - print((await client.threads.get())['status']) - ``` - -=== "Javascript" - - ```js - console.log((await client.threads.get()).status); - ``` - -=== "CURL" - - ```bash - curl --request GET \ - --url /threads/ \ - --header 'Content-Type: application/json' | jq -r '.status' - ``` - -Output: - - 'idle' - -### Find by metadata - -The search endpoint for threads also allows you to filter on metadata, which can be helpful if you use metadata to tag threads in order to keep them organized: - -=== "Python" - - ```python - print((await client.threads.search(metadata={"foo":"bar"},limit=1))[0]['status']) - ``` - -=== "Javascript" - - ```js - console.log((await client.threads.search({ metadata: { "foo": "bar" }, limit: 1 }))[0].status); - ``` - -=== "CURL" - - ```bash - curl --request POST \ - --url /threads/search \ - --header 'Content-Type: application/json' \ - --data '{"metadata": {"foo":"bar"}, "limit": 1}' | jq -r '.[0].status' - ``` - -Output: - - 'idle' \ No newline at end of file diff --git a/docs/docs/cloud/how-tos/configuration_cloud.md b/docs/docs/cloud/how-tos/configuration_cloud.md index dd38ece29..cd344ff12 100644 --- a/docs/docs/cloud/how-tos/configuration_cloud.md +++ b/docs/docs/cloud/how-tos/configuration_cloud.md @@ -79,7 +79,7 @@ This example uses the same configuration schema as above, and creates an assista import { Client } from "@langchain/langgraph-sdk"; const client = new Client({ apiUrl: }); - let openAIAssistant = await client.assistants.create({ + const openAIAssistant = await client.assistants.create({ graphId: 'agent', name: "Open AI Assistant", config: { "configurable": { "model_name": "openai" } }, @@ -150,7 +150,7 @@ We have now created an assistant called "Open AI Assistant" that has `model_name ```js const thread = await client.threads.create(); - let input = { "messages": [{ "role": "user", "content": "who made you?" }] }; + const input = { "messages": [{ "role": "user", "content": "who made you?" }] }; const streamResponse = client.runs.stream( thread["thread_id"], diff --git a/docs/docs/cloud/how-tos/copy_threads.md b/docs/docs/cloud/how-tos/copy_threads.md deleted file mode 100644 index e26cdfe52..000000000 --- a/docs/docs/cloud/how-tos/copy_threads.md +++ /dev/null @@ -1,134 +0,0 @@ -# Copying Threads - -You may wish to copy (i.e. "fork") an existing thread in order to keep the existing thread's history and create independent runs that do not affect the original thread. This guide shows how you can do that. - -## Setup - -This code assumes you already have a thread to copy. - -For more information, see these guides on [Threads](../../cloud/concepts/threads.md) and [Streaming](../../concepts/streaming.md). - -### SDK initialization - -First, we need to setup our client so that we can communicate with our hosted graph: - -=== "Python" - - ```python - from langgraph_sdk import get_client - client = get_client(url="") - assistant_id = "agent" - thread = await client.threads.create() - ``` - -=== "Javascript" - - ```js - import { Client } from "@langchain/langgraph-sdk"; - - const client = new Client({ apiUrl: "" }); - const assistantId = "agent"; - const thread = await client.threads.create(); - ``` - -=== "CURL" - - ```bash - curl --request POST \ - --url /threads \ - --header 'Content-Type: application/json' \ - --data '{ - "metadata": {} - }' - ``` - -## Copying a thread - -The code below assumes that a thread you'd like to copy already exists. - -Copying a thread will create a new thread with the same history as the existing thread, and then allow you to continue executing runs. - -### Create copy - -=== "Python" - - ```python - copied_thread = await client.threads.copy() - ``` - -=== "Javascript" - - ```js - let copiedThread = await client.threads.copy(); - ``` - -=== "CURL" - - ```bash - curl --request POST --url /threads//copy \ - --header 'Content-Type: application/json' - ``` - -### Verify copy - -We can verify that the history from the prior thread did indeed copy over correctly: - -=== "Python" - - ```python - def remove_thread_id(d): - if 'metadata' in d and 'thread_id' in d['metadata']: - del d['metadata']['thread_id'] - return d - - original_thread_history = list(map(remove_thread_id,await client.threads.get_history())) - copied_thread_history = list(map(remove_thread_id,await client.threads.get_history(copied_thread['thread_id']))) - - # Compare the two histories - assert original_thread_history == copied_thread_history - # if we made it here the assertion passed! - print("The histories are the same.") - ``` - -=== "Javascript" - - ```js - function removeThreadId(d) { - if (d.metadata && d.metadata.thread_id) { - delete d.metadata.thread_id; - } - return d; - } - - // Assuming `client.threads.getHistory(threadId)` is an async function that returns a list of dicts - async function compareThreadHistories(threadId, copiedThreadId) { - const originalThreadHistory = (await client.threads.getHistory(threadId)).map(removeThreadId); - const copiedThreadHistory = (await client.threads.getHistory(copiedThreadId)).map(removeThreadId); - - // Compare the two histories - console.assert(JSON.stringify(originalThreadHistory) === JSON.stringify(copiedThreadHistory)); - // if we made it here the assertion passed! - console.log("The histories are the same."); - } - - // Example usage - compareThreadHistories(, copiedThread.thread_id); - ``` - -=== "CURL" - - ```bash - if diff <( - curl --request GET --url /threads//history | jq -S 'map(del(.metadata.thread_id))' - ) <( - curl --request GET --url /threads//history | jq -S 'map(del(.metadata.thread_id))' - ) >/dev/null; then - echo "The histories are the same." - else - echo "The histories are different." - fi - ``` - -Output: - - The histories are the same. \ No newline at end of file diff --git a/docs/docs/cloud/how-tos/create_threads.md b/docs/docs/cloud/how-tos/create_threads.md new file mode 100644 index 000000000..5363f4384 --- /dev/null +++ b/docs/docs/cloud/how-tos/create_threads.md @@ -0,0 +1,234 @@ +# How to create a thread + +!!! info "Prerequisites" + + - [Threads Overview](../concepts/threads.md) + +To run your graph and the state persisted, you must first create a thread. In this guide, we will show how to create a thread. + +## Creating a thread + +### Empty thread + +To create a new thread, use the [LangGraph SDK](../../concepts/sdk.md) `create` method. See the [Python](../reference/sdk/python_sdk_ref.md#langgraph_sdk.client.ThreadsClient.create) and [JS](../reference/sdk/js_ts_sdk_ref.md#create_3) SDK reference docs for more information. + + +=== "Python" + + ```python + from langgraph_sdk import get_client + + client = get_client(url=) + thread = await client.threads.create() + + print(thread) + ``` + +=== "Javascript" + + ```js + import { Client } from "@langchain/langgraph-sdk"; + + const client = new Client({ apiUrl: }); + const thread = await client.threads.create(); + + console.log(thread); + ``` + +=== "CURL" + + ```bash + curl --request POST \ + --url /threads \ + --header 'Content-Type: application/json' \ + --data '{}' + ``` + +Output: + + { + "thread_id": "123e4567-e89b-12d3-a456-426614174000", + "created_at": "2025-05-12T14:04:08.268Z", + "updated_at": "2025-05-12T14:04:08.268Z", + "metadata": {}, + "status": "idle", + "values": {} + } + +### Copy thread + +Alternatively, if you already have a thread in your application whose state you wish to copy, you can use the `copy` method. This will create an independent thread whose history is identical to the original thread at the time of the operation. See the [Python](../reference/sdk/python_sdk_ref.md#langgraph_sdk.client.ThreadsClient.copy) and [JS](../reference/sdk/js_ts_sdk_ref.md#copy) SDK reference docs for more information. + +=== "Python" + + ```python + copied_thread = await client.threads.copy() + ``` + +=== "Javascript" + + ```js + const copiedThread = await client.threads.copy(); + ``` + +=== "CURL" + + ```bash + curl --request POST --url /threads//copy \ + --header 'Content-Type: application/json' + ``` + +### Prepopulated State + + +Finally, you can create a thread with an arbitrary pre-defined state by providing a list of `supersteps` into the `create` method. The `supersteps` describe a list of a sequence of state updates. For example: + +=== "Python" + + ```python + from langgraph_sdk import get_client + + client = get_client(url=) + thread = await client.threads.create( + graph_id="agent", + supersteps=[ + { + updates: [ + { + values: {}, + as_node: '__input__', + }, + ], + }, + { + updates: [ + { + values: { + messages: [ + { + type: 'human', + content: 'hello', + }, + ], + }, + as_node: '__start__', + }, + ], + }, + { + updates: [ + { + values: { + messages: [ + { + content: 'Hello! How can I assist you today?', + type: 'ai', + }, + ], + }, + as_node: 'call_model', + }, + ], + }, + ]) + + print(thread) + ``` + +=== "Javascript" + + ```js + import { Client } from "@langchain/langgraph-sdk"; + + const client = new Client({ apiUrl: }); + const thread = await client.threads.create({ + graphId: 'agent', + supersteps: [ + { + updates: [ + { + values: {}, + asNode: '__input__', + }, + ], + }, + { + updates: [ + { + values: { + messages: [ + { + type: 'human', + content: 'hello', + }, + ], + }, + asNode: '__start__', + }, + ], + }, + { + updates: [ + { + values: { + messages: [ + { + content: 'Hello! How can I assist you today?', + type: 'ai', + }, + ], + }, + asNode: 'call_model', + }, + ], + }, + ], + }); + + console.log(thread); + ``` + +=== "CURL" + + ```bash + curl --request POST \ + --url /threads \ + --header 'Content-Type: application/json' \ + --data '{"metadata":{"graph_id":"agent"},"supersteps":[{"updates":[{"values":{},"as_node":"__input__"}]},{"updates":[{"values":{"messages":[{"type":"human","content":"hello"}]},"as_node":"__start__"}]},{"updates":[{"values":{"messages":[{"content":"Hello\u0021 How can I assist you today?","type":"ai"}]},"as_node":"call_model"}]}]}' + ``` + +Output: + + { + "thread_id": "f15d70a1-27d4-4793-a897-de5609920b7d", + "created_at": "2025-05-12T15:37:08.935038+00:00", + "updated_at": "2025-05-12T15:37:08.935046+00:00", + "metadata": {"graph_id": "agent"}, + "status": "idle", + "config": {}, + "values": { + "messages": [ + { + "content": "hello", + "additional_kwargs": {}, + "response_metadata": {}, + "type": "human", + "name": null, + "id": "8701f3be-959c-4b7c-852f-c2160699b4ab", + "example": false + }, + { + "content": "Hello! How can I assist you today?", + "additional_kwargs": {}, + "response_metadata": {}, + "type": "ai", + "name": null, + "id": "4d8ea561-7ca1-409a-99f7-6b67af3e1aa3", + "example": false, + "tool_calls": [], + "invalid_tool_calls": [], + "usage_metadata": null + } + ] + } + } diff --git a/docs/docs/cloud/how-tos/same-thread.md b/docs/docs/cloud/how-tos/same-thread.md index 79fc63313..643389e1b 100644 --- a/docs/docs/cloud/how-tos/same-thread.md +++ b/docs/docs/cloud/how-tos/same-thread.md @@ -1,6 +1,6 @@ # How to run multiple agents on the same thread -In LangGraph Cloud, a thread is not explicitly associated with a particular agent. +In LangGraph Platform, a thread is not explicitly associated with a particular agent. This means that you can run multiple agents on the same thread, which allows a different agent to continue from an initial agent's progress. In this example, we will create two agents and then call them both on the same thread. diff --git a/docs/docs/cloud/how-tos/stateless_runs.md b/docs/docs/cloud/how-tos/stateless_runs.md index 810fe7e39..e1d45516c 100644 --- a/docs/docs/cloud/how-tos/stateless_runs.md +++ b/docs/docs/cloud/how-tos/stateless_runs.md @@ -1,6 +1,6 @@ # Stateless Runs -Most of the time, you provide a `thread_id` to your client when you run your graph in order to keep track of prior runs through the persistent state implemented in LangGraph Cloud. However, if you don't need to persist the runs you don't need to use the built in persistent state and can create stateless runs. +Most of the time, you provide a `thread_id` to your client when you run your graph in order to keep track of prior runs through the persistent state implemented in LangGraph Platform. However, if you don't need to persist the runs you don't need to use the built in persistent state and can create stateless runs. ## Setup diff --git a/docs/docs/cloud/how-tos/view_threads.md b/docs/docs/cloud/how-tos/view_threads.md new file mode 100644 index 000000000..c338c3dc7 --- /dev/null +++ b/docs/docs/cloud/how-tos/view_threads.md @@ -0,0 +1,266 @@ +# How to view and inspect Threads + +!!! info "Prerequisites" + + - [Threads Overview](../concepts/threads.md) + - [How to create threads](./create_threads.md) + +This guide shows how to view threads in a LangGraph Platform application and inspect their state. + +## List Threads + +### LangGraph SDK + +To list threads, use the [LangGraph SDK](../../concepts/sdk.md) `search` method. This will list the threads in the application that match the provided filters. See the [Python](../reference/sdk/python_sdk_ref.md#langgraph_sdk.client.ThreadsClient.search) and [JS](../reference/sdk/js_ts_sdk_ref.md#search_2) SDK reference docs for more information. + +#### Filter by thread status + +Use the `status` field to filter threads based on their status. Supported values are `idle`, `busy`, `interrupted`, and `error`. See [here](../reference/sdk/python_sdk_ref.md/?h=thread+status#langgraph_sdk.auth.types.ThreadStatus) for information on each status. For example, to view `idle` threads: + +=== "Python" + + ```python + print(await client.threads.search(status="idle",limit=1)) + ``` + +=== "Javascript" + + ```js + console.log(await client.threads.search({ status: "idle", limit: 1 })); + ``` + +=== "CURL" + + ```bash + curl --request POST \ + --url /threads/search \ + --header 'Content-Type: application/json' \ + --data '{"status": "idle", "limit": 1}' + ``` + +Output: + + [ + { + 'thread_id': 'cacf79bb-4248-4d01-aabc-938dbd60ed2c', + 'created_at': '2024-08-14T17:36:38.921660+00:00', + 'updated_at': '2024-08-14T17:36:38.921660+00:00', + 'metadata': {'graph_id': 'agent'}, + 'status': 'idle', + 'config': {'configurable': {}} + } + ] + +#### Filter by metadata + +The `search` method allows you to filter on metadata: + +=== "Python" + + ```python + print((await client.threads.search(metadata={"graph_id":"agent"},limit=1))) + ``` + +=== "Javascript" + + ```js + console.log((await client.threads.search({ metadata: { "graph_id": "agent" }, limit: 1 }))); + ``` + +=== "CURL" + + ```bash + curl --request POST \ + --url /threads/search \ + --header 'Content-Type: application/json' \ + --data '{"metadata": {"graph_id":"agent"}, "limit": 1}' + ``` + +Output: + + [ + { + 'thread_id': 'cacf79bb-4248-4d01-aabc-938dbd60ed2c', + 'created_at': '2024-08-14T17:36:38.921660+00:00', + 'updated_at': '2024-08-14T17:36:38.921660+00:00', + 'metadata': {'graph_id': 'agent'}, + 'status': 'idle', + 'config': {'configurable': {}} + } + ] + +#### Sorting + +The SDK also supports sorting threads by `thread_id`, `status`, `created_at`, and `updated_at` using the `sort_by` and `sort_order` params. + +### LangGraph Platform UI + +You can also view threads in a deployment via the LangGraph Platform UI. + +Inside your deployment, select the "Threads" tab. This will load a table of all of the threads in your deployment. + +To filter by thread status, select a status in the top bar. To sort by a supported property, click on the arrow icon for the desired column. + +## Inspect specific threads + +### LangGraph SDK + +#### Get Thread + +To view a specific thread given its `thread_id`, use the `get` method: + +=== "Python" + + ```python + print((await client.threads.get())) + ``` + +=== "Javascript" + + ```js + console.log((await client.threads.get())); + ``` + +=== "CURL" + + ```bash + curl --request GET \ + --url /threads/ \ + --header 'Content-Type: application/json' + ``` + +Output: + + { + 'thread_id': 'cacf79bb-4248-4d01-aabc-938dbd60ed2c', + 'created_at': '2024-08-14T17:36:38.921660+00:00', + 'updated_at': '2024-08-14T17:36:38.921660+00:00', + 'metadata': {'graph_id': 'agent'}, + 'status': 'idle', + 'config': {'configurable': {}} + } + +#### Inspect Thread State + +To view the current state of a given thread, use the `get_state` method: + + +=== "Python" + + ```python + print((await client.threads.get_state())) + ``` + +=== "Javascript" + + ```js + console.log((await client.threads.getState())); + ``` + +=== "CURL" + + ```bash + curl --request GET \ + --url /threads//state \ + --header 'Content-Type: application/json' + ``` + +Output: + + { + "values": { + "messages": [ + { + "content": "hello", + "additional_kwargs": {}, + "response_metadata": {}, + "type": "human", + "name": null, + "id": "8701f3be-959c-4b7c-852f-c2160699b4ab", + "example": false + }, + { + "content": "Hello! How can I assist you today?", + "additional_kwargs": {}, + "response_metadata": {}, + "type": "ai", + "name": null, + "id": "4d8ea561-7ca1-409a-99f7-6b67af3e1aa3", + "example": false, + "tool_calls": [], + "invalid_tool_calls": [], + "usage_metadata": null + } + ] + }, + "next": [], + "tasks": [], + "metadata": { + "thread_id": "f15d70a1-27d4-4793-a897-de5609920b7d", + "checkpoint_id": "1f02f46f-7308-616c-8000-1b158a9a6955", + "graph_id": "agent_with_quite_a_long_name", + "source": "update", + "step": 1, + "writes": { + "call_model": { + "messages": [ + { + "content": "Hello! How can I assist you today?", + "type": "ai" + } + ] + } + }, + "parents": {} + }, + "created_at": "2025-05-12T15:37:09.008055+00:00", + "checkpoint": { + "checkpoint_id": "1f02f46f-733f-6b58-8001-ea90dcabb1bd", + "thread_id": "f15d70a1-27d4-4793-a897-de5609920b7d", + "checkpoint_ns": "" + }, + "parent_checkpoint": { + "checkpoint_id": "1f02f46f-7308-616c-8000-1b158a9a6955", + "thread_id": "f15d70a1-27d4-4793-a897-de5609920b7d", + "checkpoint_ns": "" + }, + "checkpoint_id": "1f02f46f-733f-6b58-8001-ea90dcabb1bd", + "parent_checkpoint_id": "1f02f46f-7308-616c-8000-1b158a9a6955" + } + +Optionally, to view the state of a thread at a given checkpoint, simply pass in the checkpoint id (or the entire checkpoint object): + +=== "Python" + + ```python + thread_state = await client.threads.get_state( + thread_id= + checkpoint_id= + ) + ``` + +=== "Javascript" + + ```js + const threadState = await client.threads.getState(, ); + ``` + +=== "CURL" + + ```bash + curl --request GET \ + --url /threads//state/ \ + --header 'Content-Type: application/json' + ``` + +#### Inspect Full Thread History + +To view a thread's history, use the `get_history` method. This returns a list of every state the thread experienced. For more information see the [Python](../reference/sdk/python_sdk_ref.md/#langgraph_sdk.client.ThreadsClient.get_history) and [JS](../reference/sdk/js_ts_sdk_ref.md/#gethistory) reference docs. + +### LangGraph Platform UI + +You can also view threads in a deployment via the LangGraph Platform UI. + +Inside your deployment, select the "Threads" tab. This will load a table of all of the threads in your deployment. + +Select a thread to inspect its current state. To view it's full history and for further debugging, open the thread in [LangGraph Studio](../../concepts//langgraph_studio.md). \ No newline at end of file diff --git a/docs/docs/concepts/assistants.md b/docs/docs/concepts/assistants.md index 58c669223..edd0eddf2 100644 --- a/docs/docs/concepts/assistants.md +++ b/docs/docs/concepts/assistants.md @@ -23,3 +23,7 @@ In practice, an assistant is just an _instance_ of a graph with a specific confi Assistants support versioning to track changes over time. Once you've created an assistant, subsequent edits to that assistant will create new versions. See [this how-to](../cloud/how-tos/assistant_versioning.md) for more details on how to manage assistant versions. + +## Learn more + +* The LangGraph Cloud API provides several endpoints for creating and managing assistants their versions. See the [API reference](../../cloud/reference/api/api_ref.html#tag/assistants) for more details. \ No newline at end of file diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 9ee7b9684..a4a6839aa 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -197,8 +197,8 @@ nav: - cloud/how-tos/assistant_versioning.md - Threads: - Overview: cloud/concepts/threads.md - - cloud/how-tos/copy_threads.md - - cloud/how-tos/check_thread_status.md + - cloud/how-tos/create_threads.md + - cloud/how-tos/view_threads.md - Runs: - Overview: cloud/concepts/runs.md - cloud/how-tos/background_run.md diff --git a/libs/sdk-py/langgraph_sdk/client.py b/libs/sdk-py/langgraph_sdk/client.py index 59951958d..8730b201a 100644 --- a/libs/sdk-py/langgraph_sdk/client.py +++ b/libs/sdk-py/langgraph_sdk/client.py @@ -1042,7 +1042,7 @@ class ThreadsClient: { "values": u["values"], "command": u.get("command"), - "as_node": u["as_node"], + " ": u["as_node"], } for u in s["updates"] ] From 04a42c014b6cef1d3fab404ea86286972878a050 Mon Sep 17 00:00:00 2001 From: Arjun Natarajan Date: Mon, 12 May 2025 15:22:26 -0400 Subject: [PATCH 2/5] rm accidental change --- libs/sdk-py/langgraph_sdk/client.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/sdk-py/langgraph_sdk/client.py b/libs/sdk-py/langgraph_sdk/client.py index 8730b201a..59951958d 100644 --- a/libs/sdk-py/langgraph_sdk/client.py +++ b/libs/sdk-py/langgraph_sdk/client.py @@ -1042,7 +1042,7 @@ class ThreadsClient: { "values": u["values"], "command": u.get("command"), - " ": u["as_node"], + "as_node": u["as_node"], } for u in s["updates"] ] From e1ea8c953800c256b403ca156ea4eee8dd62be4b Mon Sep 17 00:00:00 2001 From: Arjun Natarajan Date: Mon, 12 May 2025 16:55:03 -0400 Subject: [PATCH 3/5] pr feedback --- docs/docs/cloud/how-tos/create_threads.md | 234 ----------------- .../{view_threads.md => use_threads.md} | 239 +++++++++++++++++- docs/mkdocs.yml | 3 +- 3 files changed, 233 insertions(+), 243 deletions(-) delete mode 100644 docs/docs/cloud/how-tos/create_threads.md rename docs/docs/cloud/how-tos/{view_threads.md => use_threads.md} (54%) diff --git a/docs/docs/cloud/how-tos/create_threads.md b/docs/docs/cloud/how-tos/create_threads.md deleted file mode 100644 index 5363f4384..000000000 --- a/docs/docs/cloud/how-tos/create_threads.md +++ /dev/null @@ -1,234 +0,0 @@ -# How to create a thread - -!!! info "Prerequisites" - - - [Threads Overview](../concepts/threads.md) - -To run your graph and the state persisted, you must first create a thread. In this guide, we will show how to create a thread. - -## Creating a thread - -### Empty thread - -To create a new thread, use the [LangGraph SDK](../../concepts/sdk.md) `create` method. See the [Python](../reference/sdk/python_sdk_ref.md#langgraph_sdk.client.ThreadsClient.create) and [JS](../reference/sdk/js_ts_sdk_ref.md#create_3) SDK reference docs for more information. - - -=== "Python" - - ```python - from langgraph_sdk import get_client - - client = get_client(url=) - thread = await client.threads.create() - - print(thread) - ``` - -=== "Javascript" - - ```js - import { Client } from "@langchain/langgraph-sdk"; - - const client = new Client({ apiUrl: }); - const thread = await client.threads.create(); - - console.log(thread); - ``` - -=== "CURL" - - ```bash - curl --request POST \ - --url /threads \ - --header 'Content-Type: application/json' \ - --data '{}' - ``` - -Output: - - { - "thread_id": "123e4567-e89b-12d3-a456-426614174000", - "created_at": "2025-05-12T14:04:08.268Z", - "updated_at": "2025-05-12T14:04:08.268Z", - "metadata": {}, - "status": "idle", - "values": {} - } - -### Copy thread - -Alternatively, if you already have a thread in your application whose state you wish to copy, you can use the `copy` method. This will create an independent thread whose history is identical to the original thread at the time of the operation. See the [Python](../reference/sdk/python_sdk_ref.md#langgraph_sdk.client.ThreadsClient.copy) and [JS](../reference/sdk/js_ts_sdk_ref.md#copy) SDK reference docs for more information. - -=== "Python" - - ```python - copied_thread = await client.threads.copy() - ``` - -=== "Javascript" - - ```js - const copiedThread = await client.threads.copy(); - ``` - -=== "CURL" - - ```bash - curl --request POST --url /threads//copy \ - --header 'Content-Type: application/json' - ``` - -### Prepopulated State - - -Finally, you can create a thread with an arbitrary pre-defined state by providing a list of `supersteps` into the `create` method. The `supersteps` describe a list of a sequence of state updates. For example: - -=== "Python" - - ```python - from langgraph_sdk import get_client - - client = get_client(url=) - thread = await client.threads.create( - graph_id="agent", - supersteps=[ - { - updates: [ - { - values: {}, - as_node: '__input__', - }, - ], - }, - { - updates: [ - { - values: { - messages: [ - { - type: 'human', - content: 'hello', - }, - ], - }, - as_node: '__start__', - }, - ], - }, - { - updates: [ - { - values: { - messages: [ - { - content: 'Hello! How can I assist you today?', - type: 'ai', - }, - ], - }, - as_node: 'call_model', - }, - ], - }, - ]) - - print(thread) - ``` - -=== "Javascript" - - ```js - import { Client } from "@langchain/langgraph-sdk"; - - const client = new Client({ apiUrl: }); - const thread = await client.threads.create({ - graphId: 'agent', - supersteps: [ - { - updates: [ - { - values: {}, - asNode: '__input__', - }, - ], - }, - { - updates: [ - { - values: { - messages: [ - { - type: 'human', - content: 'hello', - }, - ], - }, - asNode: '__start__', - }, - ], - }, - { - updates: [ - { - values: { - messages: [ - { - content: 'Hello! How can I assist you today?', - type: 'ai', - }, - ], - }, - asNode: 'call_model', - }, - ], - }, - ], - }); - - console.log(thread); - ``` - -=== "CURL" - - ```bash - curl --request POST \ - --url /threads \ - --header 'Content-Type: application/json' \ - --data '{"metadata":{"graph_id":"agent"},"supersteps":[{"updates":[{"values":{},"as_node":"__input__"}]},{"updates":[{"values":{"messages":[{"type":"human","content":"hello"}]},"as_node":"__start__"}]},{"updates":[{"values":{"messages":[{"content":"Hello\u0021 How can I assist you today?","type":"ai"}]},"as_node":"call_model"}]}]}' - ``` - -Output: - - { - "thread_id": "f15d70a1-27d4-4793-a897-de5609920b7d", - "created_at": "2025-05-12T15:37:08.935038+00:00", - "updated_at": "2025-05-12T15:37:08.935046+00:00", - "metadata": {"graph_id": "agent"}, - "status": "idle", - "config": {}, - "values": { - "messages": [ - { - "content": "hello", - "additional_kwargs": {}, - "response_metadata": {}, - "type": "human", - "name": null, - "id": "8701f3be-959c-4b7c-852f-c2160699b4ab", - "example": false - }, - { - "content": "Hello! How can I assist you today?", - "additional_kwargs": {}, - "response_metadata": {}, - "type": "ai", - "name": null, - "id": "4d8ea561-7ca1-409a-99f7-6b67af3e1aa3", - "example": false, - "tool_calls": [], - "invalid_tool_calls": [], - "usage_metadata": null - } - ] - } - } diff --git a/docs/docs/cloud/how-tos/view_threads.md b/docs/docs/cloud/how-tos/use_threads.md similarity index 54% rename from docs/docs/cloud/how-tos/view_threads.md rename to docs/docs/cloud/how-tos/use_threads.md index c338c3dc7..ebe97d4d3 100644 --- a/docs/docs/cloud/how-tos/view_threads.md +++ b/docs/docs/cloud/how-tos/use_threads.md @@ -1,13 +1,239 @@ -# How to view and inspect Threads +# How to use threads !!! info "Prerequisites" - [Threads Overview](../concepts/threads.md) - - [How to create threads](./create_threads.md) -This guide shows how to view threads in a LangGraph Platform application and inspect their state. +In this guide, we will show how to create, view, and inspect threads. -## List Threads +## Create a thread + +To run your graph and the state persisted, you must first create a thread. + +### Empty thread + +To create a new thread, use the [LangGraph SDK](../../concepts/sdk.md) `create` method. See the [Python](../reference/sdk/python_sdk_ref.md#langgraph_sdk.client.ThreadsClient.create) and [JS](../reference/sdk/js_ts_sdk_ref.md#create_3) SDK reference docs for more information. + +=== "Python" + + ```python + from langgraph_sdk import get_client + + client = get_client(url=) + thread = await client.threads.create() + + print(thread) + ``` + +=== "Javascript" + + ```js + import { Client } from "@langchain/langgraph-sdk"; + + const client = new Client({ apiUrl: }); + const thread = await client.threads.create(); + + console.log(thread); + ``` + +=== "CURL" + + ```bash + curl --request POST \ + --url /threads \ + --header 'Content-Type: application/json' \ + --data '{}' + ``` + +Output: + + { + "thread_id": "123e4567-e89b-12d3-a456-426614174000", + "created_at": "2025-05-12T14:04:08.268Z", + "updated_at": "2025-05-12T14:04:08.268Z", + "metadata": {}, + "status": "idle", + "values": {} + } + +### Copy thread + +Alternatively, if you already have a thread in your application whose state you wish to copy, you can use the `copy` method. This will create an independent thread whose history is identical to the original thread at the time of the operation. See the [Python](../reference/sdk/python_sdk_ref.md#langgraph_sdk.client.ThreadsClient.copy) and [JS](../reference/sdk/js_ts_sdk_ref.md#copy) SDK reference docs for more information. + +=== "Python" + + ```python + copied_thread = await client.threads.copy() + ``` + +=== "Javascript" + + ```js + const copiedThread = await client.threads.copy(); + ``` + +=== "CURL" + + ```bash + curl --request POST --url /threads//copy \ + --header 'Content-Type: application/json' + ``` + +### Prepopulated State + +Finally, you can create a thread with an arbitrary pre-defined state by providing a list of `supersteps` into the `create` method. The `supersteps` describe a list of a sequence of state updates. For example: + +=== "Python" + + ```python + from langgraph_sdk import get_client + + client = get_client(url=) + thread = await client.threads.create( + graph_id="agent", + supersteps=[ + { + updates: [ + { + values: {}, + as_node: '__input__', + }, + ], + }, + { + updates: [ + { + values: { + messages: [ + { + type: 'human', + content: 'hello', + }, + ], + }, + as_node: '__start__', + }, + ], + }, + { + updates: [ + { + values: { + messages: [ + { + content: 'Hello! How can I assist you today?', + type: 'ai', + }, + ], + }, + as_node: 'call_model', + }, + ], + }, + ]) + + print(thread) + ``` + +=== "Javascript" + + ```js + import { Client } from "@langchain/langgraph-sdk"; + + const client = new Client({ apiUrl: }); + const thread = await client.threads.create({ + graphId: 'agent', + supersteps: [ + { + updates: [ + { + values: {}, + asNode: '__input__', + }, + ], + }, + { + updates: [ + { + values: { + messages: [ + { + type: 'human', + content: 'hello', + }, + ], + }, + asNode: '__start__', + }, + ], + }, + { + updates: [ + { + values: { + messages: [ + { + content: 'Hello! How can I assist you today?', + type: 'ai', + }, + ], + }, + asNode: 'call_model', + }, + ], + }, + ], + }); + + console.log(thread); + ``` + +=== "CURL" + + ```bash + curl --request POST \ + --url /threads \ + --header 'Content-Type: application/json' \ + --data '{"metadata":{"graph_id":"agent"},"supersteps":[{"updates":[{"values":{},"as_node":"__input__"}]},{"updates":[{"values":{"messages":[{"type":"human","content":"hello"}]},"as_node":"__start__"}]},{"updates":[{"values":{"messages":[{"content":"Hello\u0021 How can I assist you today?","type":"ai"}]},"as_node":"call_model"}]}]}' + ``` + +Output: + + { + "thread_id": "f15d70a1-27d4-4793-a897-de5609920b7d", + "created_at": "2025-05-12T15:37:08.935038+00:00", + "updated_at": "2025-05-12T15:37:08.935046+00:00", + "metadata": {"graph_id": "agent"}, + "status": "idle", + "config": {}, + "values": { + "messages": [ + { + "content": "hello", + "additional_kwargs": {}, + "response_metadata": {}, + "type": "human", + "name": null, + "id": "8701f3be-959c-4b7c-852f-c2160699b4ab", + "example": false + }, + { + "content": "Hello! How can I assist you today?", + "additional_kwargs": {}, + "response_metadata": {}, + "type": "ai", + "name": null, + "id": "4d8ea561-7ca1-409a-99f7-6b67af3e1aa3", + "example": false, + "tool_calls": [], + "invalid_tool_calls": [], + "usage_metadata": null + } + ] + } + } + +## List threads ### LangGraph SDK @@ -101,7 +327,7 @@ Inside your deployment, select the "Threads" tab. This will load a table of all To filter by thread status, select a status in the top bar. To sort by a supported property, click on the arrow icon for the desired column. -## Inspect specific threads +## Inspect threads ### LangGraph SDK @@ -144,7 +370,6 @@ Output: To view the current state of a given thread, use the `get_state` method: - === "Python" ```python @@ -263,4 +488,4 @@ You can also view threads in a deployment via the LangGraph Platform UI. Inside your deployment, select the "Threads" tab. This will load a table of all of the threads in your deployment. -Select a thread to inspect its current state. To view it's full history and for further debugging, open the thread in [LangGraph Studio](../../concepts//langgraph_studio.md). \ No newline at end of file +Select a thread to inspect its current state. To view it's full history and for further debugging, open the thread in [LangGraph Studio](../../concepts//langgraph_studio.md). diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index a4a6839aa..657e49612 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -197,8 +197,7 @@ nav: - cloud/how-tos/assistant_versioning.md - Threads: - Overview: cloud/concepts/threads.md - - cloud/how-tos/create_threads.md - - cloud/how-tos/view_threads.md + - cloud/how-tos/use_threads.md - Runs: - Overview: cloud/concepts/runs.md - cloud/how-tos/background_run.md From 9fce01f884a999601ee882a69899b7246d139e41 Mon Sep 17 00:00:00 2001 From: Ido Salomon Date: Tue, 13 May 2025 00:08:47 +0300 Subject: [PATCH 4/5] [Proposal] add gitmcp badge for simple LLM-accessible documentation (#4502) [gitmcp.io](https://gitmcp.io/) provides easy access to the latest langgraph docs through a remote, free, open-source MCP. It's supported by all major clients (including the new claude.ai web client). It enables two access points - - Empower AI agents (e.g., Cursor) with live documentation context to prevent hallucinations. - Chat with the documentation in the browser via the embedded chat This PR proposes adding a new badge to help users make the most of Langgraph's documentation with GitMCP. The badge is [customizable](https://github.com/idosal/git-mcp?tab=readme-ov-file#-gitmcp-badge). The count is a live count of users accessing Langgraph's documentation through GitMCP. Example: [![GitMCP](https://img.shields.io/endpoint?url=https://gitmcp.io/badge/langchain-ai/langgraph)](https://gitmcp.io/langchain-ai/langgraph) You can see a demo with Langgraph's GitHub pages at gitmcp.io. Please let us know what you think :) --- README.md | 3 ++- libs/langgraph/README.md | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f818e1bf8..1500608d5 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ [![Downloads](https://static.pepy.tech/badge/langgraph/month)](https://pepy.tech/project/langgraph) [![Open Issues](https://img.shields.io/github/issues-raw/langchain-ai/langgraph)](https://github.com/langchain-ai/langgraph/issues) [![Docs](https://img.shields.io/badge/docs-latest-blue)](https://langchain-ai.github.io/langgraph/) +[![GitMCP](https://img.shields.io/endpoint?url=https://gitmcp.io/badge/langchain-ai/langgraph)](https://gitmcp.io/langchain-ai/langgraph) Trusted by companies shaping the future of agents – including Klarna, Replit, Elastic, and more – LangGraph is a powerful low-level orchestration framework for building, managing, and deploying long-running, stateful agents. @@ -80,4 +81,4 @@ While LangGraph can be used standalone, it also integrates seamlessly with any L ## Acknowledgements -LangGraph is inspired by [Pregel](https://research.google/pubs/pub37252/) and [Apache Beam](https://beam.apache.org/). The public interface draws inspiration from [NetworkX](https://networkx.org/documentation/latest/). LangGraph is built by LangChain Inc, the creators of LangChain, but can be used without LangChain. \ No newline at end of file +LangGraph is inspired by [Pregel](https://research.google/pubs/pub37252/) and [Apache Beam](https://beam.apache.org/). The public interface draws inspiration from [NetworkX](https://networkx.org/documentation/latest/). LangGraph is built by LangChain Inc, the creators of LangChain, but can be used without LangChain. diff --git a/libs/langgraph/README.md b/libs/langgraph/README.md index f818e1bf8..1500608d5 100644 --- a/libs/langgraph/README.md +++ b/libs/langgraph/README.md @@ -12,6 +12,7 @@ [![Downloads](https://static.pepy.tech/badge/langgraph/month)](https://pepy.tech/project/langgraph) [![Open Issues](https://img.shields.io/github/issues-raw/langchain-ai/langgraph)](https://github.com/langchain-ai/langgraph/issues) [![Docs](https://img.shields.io/badge/docs-latest-blue)](https://langchain-ai.github.io/langgraph/) +[![GitMCP](https://img.shields.io/endpoint?url=https://gitmcp.io/badge/langchain-ai/langgraph)](https://gitmcp.io/langchain-ai/langgraph) Trusted by companies shaping the future of agents – including Klarna, Replit, Elastic, and more – LangGraph is a powerful low-level orchestration framework for building, managing, and deploying long-running, stateful agents. @@ -80,4 +81,4 @@ While LangGraph can be used standalone, it also integrates seamlessly with any L ## Acknowledgements -LangGraph is inspired by [Pregel](https://research.google/pubs/pub37252/) and [Apache Beam](https://beam.apache.org/). The public interface draws inspiration from [NetworkX](https://networkx.org/documentation/latest/). LangGraph is built by LangChain Inc, the creators of LangChain, but can be used without LangChain. \ No newline at end of file +LangGraph is inspired by [Pregel](https://research.google/pubs/pub37252/) and [Apache Beam](https://beam.apache.org/). The public interface draws inspiration from [NetworkX](https://networkx.org/documentation/latest/). LangGraph is built by LangChain Inc, the creators of LangChain, but can be used without LangChain. From a16176c5bf55c745535b77049252794014fe1877 Mon Sep 17 00:00:00 2001 From: William Fu-Hinthorn <13333726+hinthornw@users.noreply.github.com> Date: Mon, 12 May 2025 14:23:20 -0700 Subject: [PATCH 5/5] fix: (docs) Update openapi.json --- docs/docs/cloud/reference/api/openapi.json | 1181 ++++++-------------- 1 file changed, 332 insertions(+), 849 deletions(-) diff --git a/docs/docs/cloud/reference/api/openapi.json b/docs/docs/cloud/reference/api/openapi.json index f66968732..f0a741655 100644 --- a/docs/docs/cloud/reference/api/openapi.json +++ b/docs/docs/cloud/reference/api/openapi.json @@ -1,9 +1,6 @@ { "openapi": "3.1.0", - "info": { - "title": "LangGraph Platform", - "version": "0.1.0" - }, + "info": { "title": "LangGraph Platform", "version": "0.1.0" }, "tags": [ { "name": "Assistants", @@ -40,9 +37,7 @@ "requestBody": { "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/AssistantCreate" - } + "schema": { "$ref": "#/components/schemas/AssistantCreate" } } }, "required": true @@ -52,9 +47,7 @@ "description": "Success", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/Assistant" - } + "schema": { "$ref": "#/components/schemas/Assistant" } } } }, @@ -62,9 +55,7 @@ "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -72,9 +63,7 @@ "description": "Conflict", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -82,9 +71,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -113,9 +100,7 @@ "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/Assistant" - }, + "items": { "$ref": "#/components/schemas/Assistant" }, "type": "array", "title": "Response Search Assistants Assistants Search Post" } @@ -126,9 +111,7 @@ "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -136,9 +119,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -170,9 +151,7 @@ "description": "Success", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/Assistant" - } + "schema": { "$ref": "#/components/schemas/Assistant" } } } }, @@ -180,9 +159,7 @@ "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -210,19 +187,13 @@ "responses": { "200": { "description": "Success", - "content": { - "application/json": { - "schema": {} - } - } + "content": { "application/json": { "schema": {} } } }, "404": { "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -230,9 +201,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -260,9 +229,7 @@ "requestBody": { "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/AssistantPatch" - } + "schema": { "$ref": "#/components/schemas/AssistantPatch" } } }, "required": true @@ -272,9 +239,7 @@ "description": "Success", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/Assistant" - } + "schema": { "$ref": "#/components/schemas/Assistant" } } } }, @@ -282,9 +247,7 @@ "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -292,9 +255,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -333,14 +294,7 @@ "description": "Include graph representation of subgraphs. If an integer value is provided, only subgraphs with a depth less than or equal to the value will be included.", "required": false, "schema": { - "oneOf": [ - { - "type": "boolean" - }, - { - "type": "integer" - } - ], + "oneOf": [{ "type": "boolean" }, { "type": "integer" }], "title": "Xray", "default": false, "description": "Include graph representation of subgraphs. If an integer value is provided, only subgraphs with a depth less than or equal to the value will be included." @@ -356,9 +310,7 @@ "application/json": { "schema": { "additionalProperties": { - "items": { - "type": "object" - }, + "items": { "type": "object" }, "type": "array" }, "type": "object", @@ -371,9 +323,7 @@ "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -381,9 +331,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -425,9 +373,7 @@ "description": "Success", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/Subgraphs" - } + "schema": { "$ref": "#/components/schemas/Subgraphs" } } } }, @@ -435,9 +381,7 @@ "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -445,9 +389,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -475,10 +417,7 @@ { "description": "Namespace of the subgraph to filter by.", "required": true, - "schema": { - "type": "string", - "title": "Namespace" - }, + "schema": { "type": "string", "title": "Namespace" }, "name": "namespace", "in": "path" }, @@ -499,9 +438,7 @@ "description": "Success", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/Subgraphs" - } + "schema": { "$ref": "#/components/schemas/Subgraphs" } } } }, @@ -509,9 +446,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -543,9 +478,7 @@ "description": "Success", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/GraphSchema" - } + "schema": { "$ref": "#/components/schemas/GraphSchema" } } } }, @@ -553,9 +486,7 @@ "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -563,9 +494,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -598,9 +527,7 @@ "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/Assistant" - }, + "items": { "$ref": "#/components/schemas/Assistant" }, "type": "array", "title": "Response Search Assistants Assistants Search Post" } @@ -611,9 +538,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -656,9 +581,7 @@ "description": "Success", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/Assistant" - } + "schema": { "$ref": "#/components/schemas/Assistant" } } } }, @@ -666,9 +589,7 @@ "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -676,9 +597,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -694,9 +613,7 @@ "requestBody": { "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ThreadCreate" - } + "schema": { "$ref": "#/components/schemas/ThreadCreate" } } }, "required": true @@ -706,9 +623,7 @@ "description": "Success", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/Thread" - } + "schema": { "$ref": "#/components/schemas/Thread" } } } }, @@ -716,9 +631,7 @@ "description": "Conflict", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -726,9 +639,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -757,9 +668,7 @@ "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/Thread" - }, + "items": { "$ref": "#/components/schemas/Thread" }, "type": "array", "title": "Response Search Threads Threads Search Post" } @@ -770,59 +679,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - } - } - } - }, - "/threads/state/bulk": { - "post": { - "tags": ["Threads"], - "summary": "Bulk Update Thread State", - "description": "Create a new thread from a batch of state updates.", - "operationId": "bulk_update_thread_state_post", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ThreadStateBulkUpdate" - } - } - }, - "required": true - }, - "responses": { - "200": { - "description": "Success", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Thread" - } - } - } - }, - "409": { - "description": "Conflict", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } - } - } - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -847,6 +704,17 @@ }, "name": "thread_id", "in": "path" + }, + { + "description": "Whether to include subgraphs in the response.", + "required": false, + "schema": { + "type": "boolean", + "title": "Subgraphs", + "description": "Whether to include subgraphs in the response." + }, + "name": "subgraphs", + "in": "query" } ], "responses": { @@ -854,9 +722,7 @@ "description": "Success", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ThreadState" - } + "schema": { "$ref": "#/components/schemas/ThreadState" } } } }, @@ -864,9 +730,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -894,9 +758,7 @@ "requestBody": { "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ThreadStateUpdate" - } + "schema": { "$ref": "#/components/schemas/ThreadStateUpdate" } } }, "required": true @@ -916,9 +778,70 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } + } + } + } + } + } + }, + "/threads/{thread_id}/state/{checkpoint_id}": { + "get": { + "tags": ["Threads"], + "summary": "Get Thread State At Checkpoint", + "description": "Get state for a thread at a specific checkpoint.", + "operationId": "get_thread_state_at_checkpoint_threads__thread_id__state__checkpoint_id__get", + "parameters": [ + { + "description": "The ID of the thread.", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Thread Id", + "description": "The ID of the thread." + }, + "name": "thread_id", + "in": "path" + }, + { + "description": "The ID of the checkpoint.", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Checkpoint Id", + "description": "The ID of the checkpoint." + }, + "name": "checkpoint_id", + "in": "path" + }, + { + "description": "Whether to include subgraphs in the response.", + "required": false, + "schema": { + "type": "boolean", + "title": "Subgraphs", + "description": "Whether to include subgraphs in the response." + }, + "name": "subgraphs", + "in": "query" + } + ], + "responses": { + "200": { + "description": "Success", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/ThreadState" } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -931,6 +854,30 @@ "summary": "Get Thread State At Checkpoint", "description": "Get state for a thread at a specific checkpoint.", "operationId": "post_thread_state_at_checkpoint_threads__thread_id__state__checkpoint_id__get", + "parameters": [ + { + "description": "The ID of the thread.", + "required": true, + "schema": { + "type": "string", + "format": "uuid", + "title": "Thread Id", + "description": "The ID of the thread." + }, + "name": "thread_id", + "in": "path" + }, + { + "required": false, + "schema": { + "type": "boolean", + "title": "Subgraphs", + "description": "If true, includes subgraph states." + }, + "name": "subgraphs", + "in": "query" + } + ], "requestBody": { "content": { "application/json": { @@ -946,9 +893,7 @@ "description": "Success", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ThreadState" - } + "schema": { "$ref": "#/components/schemas/ThreadState" } } } }, @@ -956,9 +901,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -986,20 +929,13 @@ }, { "required": false, - "schema": { - "type": "integer", - "title": "Limit", - "default": 10 - }, + "schema": { "type": "integer", "title": "Limit", "default": 10 }, "name": "limit", "in": "query" }, { "required": false, - "schema": { - "type": "string", - "title": "Before" - }, + "schema": { "type": "string", "title": "Before" }, "name": "before", "in": "query" } @@ -1023,9 +959,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -1053,9 +987,7 @@ "requestBody": { "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ThreadStateSearch" - } + "schema": { "$ref": "#/components/schemas/ThreadStateSearch" } } }, "required": true @@ -1079,9 +1011,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -1113,9 +1043,7 @@ "description": "Success", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/Thread" - } + "schema": { "$ref": "#/components/schemas/Thread" } } } }, @@ -1123,9 +1051,7 @@ "description": "Conflict", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -1133,9 +1059,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -1167,9 +1091,7 @@ "description": "Success", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/Thread" - } + "schema": { "$ref": "#/components/schemas/Thread" } } } }, @@ -1177,9 +1099,7 @@ "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -1187,9 +1107,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -1217,19 +1135,13 @@ "responses": { "200": { "description": "Success", - "content": { - "application/json": { - "schema": {} - } - } + "content": { "application/json": { "schema": {} } } }, "404": { "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -1237,9 +1149,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -1267,9 +1177,7 @@ "requestBody": { "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ThreadPatch" - } + "schema": { "$ref": "#/components/schemas/ThreadPatch" } } }, "required": true @@ -1279,9 +1187,7 @@ "description": "Success", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/Thread" - } + "schema": { "$ref": "#/components/schemas/Thread" } } } }, @@ -1289,9 +1195,7 @@ "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -1299,9 +1203,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -1329,21 +1231,13 @@ }, { "required": false, - "schema": { - "type": "integer", - "title": "Limit", - "default": 10 - }, + "schema": { "type": "integer", "title": "Limit", "default": 10 }, "name": "limit", "in": "query" }, { "required": false, - "schema": { - "type": "integer", - "title": "Offset", - "default": 0 - }, + "schema": { "type": "integer", "title": "Offset", "default": 0 }, "name": "offset", "in": "query" }, @@ -1363,9 +1257,7 @@ "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/Run" - }, + "items": { "$ref": "#/components/schemas/Run" }, "type": "array" } } @@ -1375,9 +1267,7 @@ "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -1385,9 +1275,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -1415,9 +1303,7 @@ "requestBody": { "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/RunCreateStateful" - } + "schema": { "$ref": "#/components/schemas/RunCreateStateful" } } }, "required": true @@ -1427,9 +1313,7 @@ "description": "Success", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/Run" - } + "schema": { "$ref": "#/components/schemas/Run" } } } }, @@ -1437,9 +1321,7 @@ "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -1447,9 +1329,7 @@ "description": "Conflict", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -1457,9 +1337,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -1489,9 +1367,7 @@ "requestBody": { "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/CronCreate" - } + "schema": { "$ref": "#/components/schemas/CronCreate" } } }, "required": true @@ -1501,9 +1377,7 @@ "description": "Success", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/Cron" - } + "schema": { "$ref": "#/components/schemas/Cron" } } } }, @@ -1511,9 +1385,7 @@ "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -1521,9 +1393,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -1553,9 +1423,7 @@ "requestBody": { "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/RunCreateStateful" - } + "schema": { "$ref": "#/components/schemas/RunCreateStateful" } } }, "required": true @@ -1576,9 +1444,7 @@ "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -1586,9 +1452,7 @@ "description": "Conflict", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -1596,9 +1460,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -1628,9 +1490,7 @@ "requestBody": { "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/RunCreateStateful" - } + "schema": { "$ref": "#/components/schemas/RunCreateStateful" } } }, "required": true @@ -1638,19 +1498,13 @@ "responses": { "200": { "description": "Success", - "content": { - "application/json": { - "schema": {} - } - } + "content": { "application/json": { "schema": {} } } }, "404": { "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -1658,9 +1512,7 @@ "description": "Conflict", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -1668,9 +1520,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -1714,9 +1564,7 @@ "description": "Success", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/Run" - } + "schema": { "$ref": "#/components/schemas/Run" } } } }, @@ -1724,9 +1572,7 @@ "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -1734,9 +1580,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -1776,19 +1620,13 @@ "responses": { "200": { "description": "Success", - "content": { - "application/json": { - "schema": {} - } - } + "content": { "application/json": { "schema": {} } } }, "404": { "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -1796,9 +1634,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -1851,19 +1687,13 @@ "responses": { "200": { "description": "Success", - "content": { - "application/json": { - "schema": {} - } - } + "content": { "application/json": { "schema": {} } } }, "404": { "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -1871,9 +1701,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -1928,9 +1756,7 @@ "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -1938,9 +1764,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -2003,19 +1827,13 @@ "responses": { "200": { "description": "Success", - "content": { - "application/json": { - "schema": {} - } - } + "content": { "application/json": { "schema": {} } } }, "404": { "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -2023,9 +1841,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -2041,9 +1857,7 @@ "requestBody": { "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/CronCreate" - } + "schema": { "$ref": "#/components/schemas/CronCreate" } } }, "required": true @@ -2053,9 +1867,7 @@ "description": "Success", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/Cron" - } + "schema": { "$ref": "#/components/schemas/Cron" } } } }, @@ -2063,9 +1875,7 @@ "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -2073,9 +1883,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -2091,9 +1899,7 @@ "requestBody": { "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/CronSearch" - } + "schema": { "$ref": "#/components/schemas/CronSearch" } } }, "required": true @@ -2104,9 +1910,7 @@ "content": { "application/json": { "schema": { - "items": { - "$ref": "#/components/schemas/Cron" - }, + "items": { "$ref": "#/components/schemas/Cron" }, "type": "array", "title": "Response Search Crons Search Post" } @@ -2117,9 +1921,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -2158,9 +1960,7 @@ "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -2168,9 +1968,7 @@ "description": "Conflict", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -2178,9 +1976,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -2210,24 +2006,18 @@ "requestBody": { "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/RunsCancel" - } + "schema": { "$ref": "#/components/schemas/RunsCancel" } } }, "required": true }, "responses": { - "204": { - "description": "Success - Runs cancelled" - }, + "204": { "description": "Success - Runs cancelled" }, "404": { "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -2235,9 +2025,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -2263,19 +2051,13 @@ "responses": { "200": { "description": "Success", - "content": { - "application/json": { - "schema": {} - } - } + "content": { "application/json": { "schema": {} } } }, "404": { "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -2283,9 +2065,7 @@ "description": "Conflict", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -2293,9 +2073,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -2321,19 +2099,13 @@ "responses": { "200": { "description": "Success", - "content": { - "application/json": { - "schema": {} - } - } + "content": { "application/json": { "schema": {} } } }, "404": { "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -2341,9 +2113,7 @@ "description": "Conflict", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -2351,9 +2121,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -2369,9 +2137,7 @@ "requestBody": { "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/RunBatchCreate" - } + "schema": { "$ref": "#/components/schemas/RunBatchCreate" } } }, "required": true @@ -2379,19 +2145,13 @@ "responses": { "200": { "description": "Success", - "content": { - "application/json": { - "schema": {} - } - } + "content": { "application/json": { "schema": {} } } }, "404": { "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -2399,9 +2159,7 @@ "description": "Conflict", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -2409,9 +2167,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -2439,19 +2195,13 @@ "responses": { "200": { "description": "Success", - "content": { - "application/json": { - "schema": {} - } - } + "content": { "application/json": { "schema": {} } } }, "404": { "description": "Not Found", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -2459,9 +2209,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -2477,23 +2225,17 @@ "required": true, "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/StorePutRequest" - } + "schema": { "$ref": "#/components/schemas/StorePutRequest" } } } }, "responses": { - "204": { - "description": "Success" - }, + "204": { "description": "Success" }, "422": { "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -2514,16 +2256,12 @@ } }, "responses": { - "204": { - "description": "Success" - }, + "204": { "description": "Success" }, "422": { "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -2538,20 +2276,13 @@ "name": "key", "in": "query", "required": true, - "schema": { - "type": "string" - } + "schema": { "type": "string" } }, { "name": "namespace", "in": "query", "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } + "schema": { "type": "array", "items": { "type": "string" } } } ], "responses": { @@ -2559,9 +2290,7 @@ "description": "Success", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/Item" - } + "schema": { "$ref": "#/components/schemas/Item" } } } }, @@ -2569,9 +2298,7 @@ "description": "Bad Request", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }, @@ -2579,9 +2306,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -2618,9 +2343,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -2657,9 +2380,7 @@ "description": "Validation Error", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } } @@ -2729,9 +2450,7 @@ "400": { "description": "Bad request: invalid JSON or message format, or unacceptable Accept header." }, - "405": { - "description": "HTTP method not allowed." - }, + "405": { "description": "HTTP method not allowed." }, "500": { "description": "Internal server error or unexpected failure." } @@ -2742,9 +2461,7 @@ "operationId": "delete_mcp", "summary": "Terminate Session", "description": "Implemented according to the Streamable HTTP Transport specification.\nTerminate an MCP session. The server implementation is stateless, so this is a no-op.\n\n", - "responses": { - "404": {} - }, + "responses": { "404": {} }, "tags": ["MCP"] } } @@ -2767,9 +2484,7 @@ "config": { "properties": { "tags": { - "items": { - "type": "string" - }, + "items": { "type": "string" }, "type": "array", "title": "Tags" }, @@ -2777,10 +2492,7 @@ "type": "integer", "title": "Recursion Limit" }, - "configurable": { - "type": "object", - "title": "Configurable" - } + "configurable": { "type": "object", "title": "Configurable" } }, "type": "object", "title": "Config", @@ -2923,20 +2635,12 @@ "Config": { "properties": { "tags": { - "items": { - "type": "string" - }, + "items": { "type": "string" }, "type": "array", "title": "Tags" }, - "recursion_limit": { - "type": "integer", - "title": "Recursion Limit" - }, - "configurable": { - "type": "object", - "title": "Configurable" - } + "recursion_limit": { "type": "integer", "title": "Recursion Limit" }, + "configurable": { "type": "object", "title": "Configurable" } }, "type": "object", "title": "Config" @@ -3011,24 +2715,14 @@ "format": "uuid", "title": "Assistant Id" }, - { - "type": "string", - "title": "Graph Id" - } + { "type": "string", "title": "Graph Id" } ], "description": "The assistant ID or graph name to run. If using graph name, will default to the assistant automatically created from that graph by the server." }, "input": { "anyOf": [ - { - "items": { - "type": "object" - }, - "type": "array" - }, - { - "type": "object" - } + { "items": { "type": "object" }, "type": "array" }, + { "type": "object" } ], "title": "Input", "description": "The input to the graph." @@ -3041,9 +2735,7 @@ "config": { "properties": { "tags": { - "items": { - "type": "string" - }, + "items": { "type": "string" }, "type": "array", "title": "Tags" }, @@ -3051,10 +2743,7 @@ "type": "integer", "title": "Recursion Limit" }, - "configurable": { - "type": "object", - "title": "Configurable" - } + "configurable": { "type": "object", "title": "Configurable" } }, "type": "object", "title": "Config", @@ -3070,32 +2759,16 @@ }, "interrupt_before": { "anyOf": [ - { - "type": "string", - "enum": ["*"] - }, - { - "items": { - "type": "string" - }, - "type": "array" - } + { "type": "string", "enum": ["*"] }, + { "items": { "type": "string" }, "type": "array" } ], "title": "Interrupt Before", "description": "Nodes to interrupt immediately before they get executed." }, "interrupt_after": { "anyOf": [ - { - "type": "string", - "enum": ["*"] - }, - { - "items": { - "type": "string" - }, - "type": "array" - } + { "type": "string", "enum": ["*"] }, + { "items": { "type": "string" }, "type": "array" } ], "title": "Interrupt After", "description": "Nodes to interrupt immediately after they get executed." @@ -3265,10 +2938,7 @@ "title": "Metadata", "description": "The run metadata." }, - "kwargs": { - "type": "object", - "title": "Kwargs" - }, + "kwargs": { "type": "object", "title": "Kwargs" }, "multitask_strategy": { "type": "string", "enum": ["reject", "rollback", "interrupt", "enqueue"], @@ -3325,27 +2995,14 @@ }, "goto": { "anyOf": [ - { - "$ref": "#/components/schemas/Send" - }, + { "$ref": "#/components/schemas/Send" }, { "type": "array", - "items": { - "$ref": "#/components/schemas/Send" - } + "items": { "$ref": "#/components/schemas/Send" } }, - { - "type": "string" - }, - { - "type": "array", - "items": { - "type": "string" - } - }, - { - "type": "null" - } + { "type": "string" }, + { "type": "array", "items": { "type": "string" } }, + { "type": "null" } ], "title": "Goto", "description": "Name of the node(s) to navigate to next or node(s) to be executed with a provided input." @@ -3361,10 +3018,7 @@ "format": "uuid", "title": "Assistant Id" }, - { - "type": "string", - "title": "Graph Id" - } + { "type": "string", "title": "Graph Id" } ], "description": "The assistant ID or graph name to run. If using graph name, will default to first assistant created from that graph." }, @@ -3376,36 +3030,20 @@ }, "input": { "anyOf": [ - { - "type": "object" - }, - { - "type": "array" - }, - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - }, - { - "type": "null" - } + { "type": "object" }, + { "type": "array" }, + { "type": "string" }, + { "type": "number" }, + { "type": "boolean" }, + { "type": "null" } ], "title": "Input", "description": "The input to the graph." }, "command": { "anyOf": [ - { - "$ref": "#/components/schemas/Command" - }, - { - "type": "null" - } + { "$ref": "#/components/schemas/Command" }, + { "type": "null" } ], "title": "Input", "description": "The input to the graph." @@ -3418,9 +3056,7 @@ "config": { "properties": { "tags": { - "items": { - "type": "string" - }, + "items": { "type": "string" }, "type": "array", "title": "Tags" }, @@ -3428,10 +3064,7 @@ "type": "integer", "title": "Recursion Limit" }, - "configurable": { - "type": "object", - "title": "Configurable" - } + "configurable": { "type": "object", "title": "Configurable" } }, "type": "object", "title": "Config", @@ -3447,32 +3080,16 @@ }, "interrupt_before": { "anyOf": [ - { - "type": "string", - "enum": ["*"] - }, - { - "items": { - "type": "string" - }, - "type": "array" - } + { "type": "string", "enum": ["*"] }, + { "items": { "type": "string" }, "type": "array" } ], "title": "Interrupt Before", "description": "Nodes to interrupt immediately before they get executed." }, "interrupt_after": { "anyOf": [ - { - "type": "string", - "enum": ["*"] - }, - { - "items": { - "type": "string" - }, - "type": "array" - } + { "type": "string", "enum": ["*"] }, + { "items": { "type": "string" }, "type": "array" } ], "title": "Interrupt After", "description": "Nodes to interrupt immediately after they get executed." @@ -3525,9 +3142,7 @@ "default": "cancel" }, "feedback_keys": { - "items": { - "type": "string" - }, + "items": { "type": "string" }, "type": "array", "title": "Feedback Keys", "description": "Feedback keys to assign to run." @@ -3565,9 +3180,7 @@ }, "RunBatchCreate": { "type": "array", - "items": { - "$ref": "#/components/schemas/RunCreateStateless" - }, + "items": { "$ref": "#/components/schemas/RunCreateStateless" }, "minItems": 1, "title": "RunBatchCreate", "description": "Payload for creating a batch of runs." @@ -3581,45 +3194,26 @@ "format": "uuid", "title": "Assistant Id" }, - { - "type": "string", - "title": "Graph Id" - } + { "type": "string", "title": "Graph Id" } ], "description": "The assistant ID or graph name to run. If using graph name, will default to first assistant created from that graph." }, "input": { "anyOf": [ - { - "type": "object" - }, - { - "type": "array" - }, - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "boolean" - }, - { - "type": "null" - } + { "type": "object" }, + { "type": "array" }, + { "type": "string" }, + { "type": "number" }, + { "type": "boolean" }, + { "type": "null" } ], "title": "Input", "description": "The input to the graph." }, "command": { "anyOf": [ - { - "$ref": "#/components/schemas/Command" - }, - { - "type": "null" - } + { "$ref": "#/components/schemas/Command" }, + { "type": "null" } ], "title": "Input", "description": "The input to the graph." @@ -3632,9 +3226,7 @@ "config": { "properties": { "tags": { - "items": { - "type": "string" - }, + "items": { "type": "string" }, "type": "array", "title": "Tags" }, @@ -3642,10 +3234,7 @@ "type": "integer", "title": "Recursion Limit" }, - "configurable": { - "type": "object", - "title": "Configurable" - } + "configurable": { "type": "object", "title": "Configurable" } }, "type": "object", "title": "Config", @@ -3661,32 +3250,16 @@ }, "interrupt_before": { "anyOf": [ - { - "type": "string", - "enum": ["*"] - }, - { - "items": { - "type": "string" - }, - "type": "array" - } + { "type": "string", "enum": ["*"] }, + { "items": { "type": "string" }, "type": "array" } ], "title": "Interrupt Before", "description": "Nodes to interrupt immediately before they get executed." }, "interrupt_after": { "anyOf": [ - { - "type": "string", - "enum": ["*"] - }, - { - "items": { - "type": "string" - }, - "type": "array" - } + { "type": "string", "enum": ["*"] }, + { "items": { "type": "string" }, "type": "array" } ], "title": "Interrupt After", "description": "Nodes to interrupt immediately after they get executed." @@ -3726,9 +3299,7 @@ "default": ["values"] }, "feedback_keys": { - "items": { - "type": "string" - }, + "items": { "type": "string" }, "type": "array", "title": "Feedback Keys", "description": "Feedback keys to assign to run." @@ -4035,22 +3606,13 @@ "properties": { "values": { "anyOf": [ - { - "items": { - "type": "object" - }, - "type": "array" - }, - { - "type": "object" - } + { "items": { "type": "object" }, "type": "array" }, + { "type": "object" } ], "title": "Values" }, "next": { - "items": { - "type": "string" - }, + "items": { "type": "string" }, "type": "array", "title": "Next" }, @@ -4058,29 +3620,15 @@ "items": { "type": "object", "properties": { - "id": { - "type": "string", - "title": "Task Id" - }, - "name": { - "type": "string", - "title": "Node Name" - }, - "error": { - "type": "string", - "title": "Error" - }, - "interrupts": { - "type": "array", - "items": {} - }, + "id": { "type": "string", "title": "Task Id" }, + "name": { "type": "string", "title": "Node Name" }, + "error": { "type": "string", "title": "Error" }, + "interrupts": { "type": "array", "items": {} }, "checkpoint": { "$ref": "#/components/schemas/CheckpointConfig", "title": "Checkpoint" }, - "state": { - "$ref": "#/components/schemas/ThreadState" - } + "state": { "$ref": "#/components/schemas/ThreadState" } }, "required": ["id", "name"] }, @@ -4091,14 +3639,8 @@ "$ref": "#/components/schemas/CheckpointConfig", "title": "Checkpoint" }, - "metadata": { - "type": "object", - "title": "Metadata" - }, - "created_at": { - "type": "string", - "title": "Created At" - }, + "metadata": { "type": "object", "title": "Metadata" }, + "created_at": { "type": "string", "title": "Created At" }, "parent_checkpoint": { "type": "object", "title": "Parent Checkpoint" @@ -4141,18 +3683,9 @@ "properties": { "values": { "anyOf": [ - { - "items": { - "type": "object" - }, - "type": "array" - }, - { - "type": "object" - }, - { - "type": "null" - } + { "items": { "type": "object" }, "type": "array" }, + { "type": "object" }, + { "type": "null" } ], "title": "Values", "description": "The values to update the state with." @@ -4176,28 +3709,15 @@ "properties": { "values": { "anyOf": [ - { - "type": "array", - "items": { - "type": "object" - } - }, - { - "type": "object" - }, - { - "type": "null" - } + { "type": "array", "items": { "type": "object" } }, + { "type": "object" }, + { "type": "null" } ] }, "command": { "anyOf": [ - { - "$ref": "#/components/schemas/Command" - }, - { - "type": "null" - } + { "$ref": "#/components/schemas/Command" }, + { "type": "null" } ], "description": "The command associated with the update." }, @@ -4211,10 +3731,7 @@ }, "ThreadStateUpdateResponse": { "properties": { - "checkpoint": { - "type": "object", - "title": "Checkpoint" - } + "checkpoint": { "type": "object", "title": "Checkpoint" } }, "type": "object", "title": "ThreadStateUpdateResponse", @@ -4249,9 +3766,7 @@ "properties": { "namespace": { "type": "array", - "items": { - "type": "string" - }, + "items": { "type": "string" }, "title": "Namespace", "description": "A list of strings representing the namespace path." }, @@ -4275,9 +3790,7 @@ "properties": { "namespace": { "type": "array", - "items": { - "type": "string" - }, + "items": { "type": "string" }, "title": "Namespace", "description": "A list of strings representing the namespace path." }, @@ -4295,9 +3808,7 @@ "properties": { "namespace_prefix": { "type": ["array", "null"], - "items": { - "type": "string" - }, + "items": { "type": "string" }, "title": "Namespace Prefix", "description": "List of strings representing the namespace prefix." }, @@ -4328,17 +3839,13 @@ "properties": { "prefix": { "type": "array", - "items": { - "type": "string" - }, + "items": { "type": "string" }, "title": "Prefix", "description": "Optional list of strings representing the prefix to filter namespaces." }, "suffix": { "type": "array", - "items": { - "type": "string" - }, + "items": { "type": "string" }, "title": "Suffix", "description": "Optional list of strings representing the suffix to filter namespaces." }, @@ -4367,9 +3874,7 @@ "properties": { "namespace": { "type": "array", - "items": { - "type": "string" - }, + "items": { "type": "string" }, "description": "The namespace of the item. A namespace is analogous to a document's directory." }, "key": { @@ -4412,21 +3917,14 @@ }, "run_ids": { "type": "array", - "items": { - "type": "string", - "format": "uuid" - }, + "items": { "type": "string", "format": "uuid" }, "title": "Run Ids", "description": "List of run IDs to cancel." } }, "oneOf": [ - { - "required": ["status"] - }, - { - "required": ["thread_id", "run_ids"] - } + { "required": ["status"] }, + { "required": ["thread_id", "run_ids"] } ] }, "SearchItemsResponse": { @@ -4435,20 +3933,13 @@ "properties": { "items": { "type": "array", - "items": { - "$ref": "#/components/schemas/Item" - } + "items": { "$ref": "#/components/schemas/Item" } } } }, "ListNamespaceResponse": { "type": "array", - "items": { - "type": "array", - "items": { - "type": "string" - } - } + "items": { "type": "array", "items": { "type": "string" } } }, "ErrorResponse": { "type": "string", @@ -4461,9 +3952,7 @@ "description": "Successful retrieval of an item.", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/Item" - } + "schema": { "$ref": "#/components/schemas/Item" } } } }, @@ -4479,9 +3968,7 @@ "description": "Successful search operation.", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/SearchItemsResponse" - } + "schema": { "$ref": "#/components/schemas/SearchItemsResponse" } } } }, @@ -4489,9 +3976,7 @@ "description": "Successful retrieval of namespaces.", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ListNamespaceResponse" - } + "schema": { "$ref": "#/components/schemas/ListNamespaceResponse" } } } }, @@ -4499,9 +3984,7 @@ "description": "An error occurred.", "content": { "application/json": { - "schema": { - "$ref": "#/components/schemas/ErrorResponse" - } + "schema": { "$ref": "#/components/schemas/ErrorResponse" } } } }