diff --git a/docs/docs/cloud/reference/sdk/python_sdk_ref.md b/docs/docs/cloud/reference/sdk/python_sdk_ref.md index 83d274d98..9c362ddea 100644 --- a/docs/docs/cloud/reference/sdk/python_sdk_ref.md +++ b/docs/docs/cloud/reference/sdk/python_sdk_ref.md @@ -1,2 +1,79 @@ # Python SDK Reference -Coming soon + +The Python SDK provides four underlying clients (`AssistantsClient`, `ThreadsClient`, `RunsClient`, `CronClient`) that correspond to each of the core API models and one top-level client (`LangGraphClient`) to access them. + +## get_client() + +The `get_client()` function returns the top-level `LangGraphClient` client. + +```python +from langgraph_sdk import get_client + +# get top-level LangGraphClient +client = get_client(url="http://localhost:8123") + +# example usage: client..() +assistants = await client.assistants.get(assistant_id="some_uuid") +``` + +::: langgraph_sdk.client.get_client + handler: python + +## LangGraphClient + +`LangGraphClient` is the top-level client for accessing `AssistantsClient`, `ThreadsClient`, `RunsClient`, and `CronClient`. + +::: langgraph_sdk.client.LangGraphClient + handler: python + +## AssistantsClient + +Access the `AssistantsClient` via the `LangGraphClient.assistants` attribute. +```python +from langgraph_sdk import get_client + +client = get_client(url="http://localhost:8123") +await client.assistants.() +``` + +::: langgraph_sdk.client.AssistantsClient + handler: python + +## ThreadsClient + +Access the `ThreadsClient` via the `LangGraphClient.threads` attribute. +```python +from langgraph_sdk import get_client + +client = get_client(url="http://localhost:8123") +await client.threads.() +``` + +::: langgraph_sdk.client.ThreadsClient + handler: python + +## RunsClient + +Access the `RunsClient` via the `LangGraphClient.runs` attribute. +```python +from langgraph_sdk import get_client + +client = get_client(url="http://localhost:8123") +await client.runs.() +``` + +::: langgraph_sdk.client.RunsClient + handler: python + +## CronClient + +Access the `CronClient` via the `LangGraphClient.crons` attribute. +```python +from langgraph_sdk import get_client + +client = get_client(url="http://localhost:8123") +await client.crons.() +``` + +::: langgraph_sdk.client.CronClient + handler: python diff --git a/poetry.lock b/poetry.lock index 95a3a015a..48311ddb9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. [[package]] name = "annotated-types" @@ -11,6 +11,28 @@ files = [ {file = "annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89"}, ] +[[package]] +name = "anyio" +version = "4.4.0" +description = "High level compatibility layer for multiple asynchronous event loop implementations" +optional = false +python-versions = ">=3.8" +files = [ + {file = "anyio-4.4.0-py3-none-any.whl", hash = "sha256:c1b2d8f46a8a812513012e1107cb0e68c17159a7a594208005a57dc776e1bdc7"}, + {file = "anyio-4.4.0.tar.gz", hash = "sha256:5aadc6a1bbb7cdb0bede386cac5e2940f5e2ff3aa20277e991cf028e0585ce94"}, +] + +[package.dependencies] +exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} +idna = ">=2.8" +sniffio = ">=1.1" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} + +[package.extras] +doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] +trio = ["trio (>=0.23)"] + [[package]] name = "appnope" version = "0.1.4" @@ -556,6 +578,17 @@ files = [ [package.dependencies] colorama = ">=0.4" +[[package]] +name = "h11" +version = "0.14.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +optional = false +python-versions = ">=3.7" +files = [ + {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, + {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, +] + [[package]] name = "htmlmin2" version = "0.1.13" @@ -566,6 +599,62 @@ files = [ {file = "htmlmin2-0.1.13-py3-none-any.whl", hash = "sha256:75609f2a42e64f7ce57dbff28a39890363bde9e7e5885db633317efbdf8c79a2"}, ] +[[package]] +name = "httpcore" +version = "1.0.5" +description = "A minimal low-level HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, + {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, +] + +[package.dependencies] +certifi = "*" +h11 = ">=0.13,<0.15" + +[package.extras] +asyncio = ["anyio (>=4.0,<5.0)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] +trio = ["trio (>=0.22.0,<0.26.0)"] + +[[package]] +name = "httpx" +version = "0.27.0" +description = "The next generation HTTP client." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5"}, + {file = "httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"}, +] + +[package.dependencies] +anyio = "*" +certifi = "*" +httpcore = "==1.*" +idna = "*" +sniffio = "*" + +[package.extras] +brotli = ["brotli", "brotlicffi"] +cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] +http2 = ["h2 (>=3,<5)"] +socks = ["socksio (==1.*)"] + +[[package]] +name = "httpx-sse" +version = "0.4.0" +description = "Consume Server-Sent Event (SSE) messages with HTTPX." +optional = false +python-versions = ">=3.8" +files = [ + {file = "httpx-sse-0.4.0.tar.gz", hash = "sha256:1e81a3a3070ce322add1d3529ed42eb5f70817f45ed6ec915ab753f961139721"}, + {file = "httpx_sse-0.4.0-py3-none-any.whl", hash = "sha256:f329af6eae57eaa2bdfd962b42524764af68075ea87370a2de920af5341e318f"}, +] + [[package]] name = "idna" version = "3.7" @@ -871,6 +960,24 @@ langchain-core = ">=0.2,<0.3" type = "directory" url = "libs/langgraph" +[[package]] +name = "langgraph-sdk" +version = "0.1.23" +description = "SDK for interacting with LangGraph API" +optional = false +python-versions = "^3.9.0,<4.0" +files = [] +develop = true + +[package.dependencies] +httpx = ">=0.25.2" +httpx-sse = ">=0.4.0" +orjson = ">=3.10.1" + +[package.source] +type = "directory" +url = "libs/sdk-py" + [[package]] name = "langsmith" version = "0.1.79" @@ -2334,6 +2441,17 @@ files = [ {file = "smmap-5.0.1.tar.gz", hash = "sha256:dceeb6c0028fdb6734471eb07c0cd2aae706ccaecab45965ee83f11c8d3b1f62"}, ] +[[package]] +name = "sniffio" +version = "1.3.1" +description = "Sniff out which async library your code is running under" +optional = false +python-versions = ">=3.7" +files = [ + {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, + {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, +] + [[package]] name = "soupsieve" version = "2.5" @@ -2551,4 +2669,4 @@ files = [ [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "5369acbf95b74ea9627f263672e460e3227383108ff0cb08d99e7af1c18f95a9" +content-hash = "70e41571a1230938107dc420734b8dfdae4e71cdc3dca8281366c45441e8d73d" diff --git a/pyproject.toml b/pyproject.toml index 6919fea0c..5636aa1ef 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,6 +11,7 @@ python = "^3.10" [tool.poetry.group.docs.dependencies] langgraph = { path = "libs/langgraph/", develop = true } +langgraph-sdk = {path = "libs/sdk-py", develop = true} mkdocs = "^1.6.0" mkdocstrings = "^0.25.1" mkdocstrings-python = "^1.10.4"