From 661e20eec4debf8af74de4bff3d9619b07ab2c35 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 7 Jan 2025 09:41:37 -0500 Subject: [PATCH 01/14] build(deps-dev): bump jinja2 from 3.1.4 to 3.1.5 (#2914) Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.4 to 3.1.5.
Release notes

Sourced from jinja2's releases.

3.1.5

This is the Jinja 3.1.5 security fix release, which fixes security issues and bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.

PyPI: https://pypi.org/project/Jinja2/3.1.5/ Changes: https://jinja.palletsprojects.com/changes/#version-3-1-5 Milestone: https://github.com/pallets/jinja/milestone/16?closed=1

Changelog

Sourced from jinja2's changelog.

Version 3.1.5

Released 2024-12-21

Commits

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=jinja2&package-manager=pip&previous-version=3.1.4&new-version=3.1.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/langchain-ai/langgraph/network/alerts).
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- poetry.lock | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/poetry.lock b/poetry.lock index 94f2b3db3..400366540 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.5 and should not be changed by hand. [[package]] name = "aiohappyeyeballs" @@ -2251,13 +2251,13 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jinja2" -version = "3.1.4" +version = "3.1.5" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, - {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, + {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, + {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, ] [package.dependencies] @@ -5114,6 +5114,7 @@ description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs optional = false python-versions = ">=3.8" files = [ + {file = "pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629"}, {file = "pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034"}, ] @@ -5124,6 +5125,7 @@ description = "A collection of ASN.1-based protocols modules" optional = false python-versions = ">=3.8" files = [ + {file = "pyasn1_modules-0.4.1-py3-none-any.whl", hash = "sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd"}, {file = "pyasn1_modules-0.4.1.tar.gz", hash = "sha256:c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c"}, ] @@ -6183,6 +6185,11 @@ files = [ {file = "scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f60021ec1574e56632be2a36b946f8143bf4e5e6af4a06d85281adc22938e0dd"}, {file = "scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:394397841449853c2290a32050382edaec3da89e35b3e03d6cc966aebc6a8ae6"}, {file = "scikit_learn-1.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:57cc1786cfd6bd118220a92ede80270132aa353647684efa385a74244a41e3b1"}, + {file = "scikit_learn-1.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9a702e2de732bbb20d3bad29ebd77fc05a6b427dc49964300340e4c9328b3f5"}, + {file = "scikit_learn-1.5.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:b0768ad641981f5d3a198430a1d31c3e044ed2e8a6f22166b4d546a5116d7908"}, + {file = "scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:178ddd0a5cb0044464fc1bfc4cca5b1833bfc7bb022d70b05db8530da4bb3dd3"}, + {file = "scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7284ade780084d94505632241bf78c44ab3b6f1e8ccab3d2af58e0e950f9c12"}, + {file = "scikit_learn-1.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:b7b0f9a0b1040830d38c39b91b3a44e1b643f4b36e36567b80b7c6bd2202a27f"}, {file = "scikit_learn-1.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:757c7d514ddb00ae249832fe87100d9c73c6ea91423802872d9e74970a0e40b9"}, {file = "scikit_learn-1.5.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:52788f48b5d8bca5c0736c175fa6bdaab2ef00a8f536cda698db61bd89c551c1"}, {file = "scikit_learn-1.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:643964678f4b5fbdc95cbf8aec638acc7aa70f5f79ee2cdad1eec3df4ba6ead8"}, From 4b06791b8ce093ea53325abc33d5bb7c19dfce56 Mon Sep 17 00:00:00 2001 From: VItto Rivabella <72762629+Eversmile12@users.noreply.github.com> Date: Tue, 7 Jan 2025 15:45:41 +0100 Subject: [PATCH 02/14] Update agent_supervisor.ipynb (#2888) --- docs/docs/tutorials/multi_agent/agent_supervisor.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/tutorials/multi_agent/agent_supervisor.ipynb b/docs/docs/tutorials/multi_agent/agent_supervisor.ipynb index 9ad48024d..111d0b05e 100644 --- a/docs/docs/tutorials/multi_agent/agent_supervisor.ipynb +++ b/docs/docs/tutorials/multi_agent/agent_supervisor.ipynb @@ -135,7 +135,7 @@ "from typing_extensions import TypedDict\n", "\n", "from langchain_anthropic import ChatAnthropic\n", - "from langgraph.graph import MessagesState\n", + "from langgraph.graph import MessagesState, END\n", "from langgraph.types import Command\n", "\n", "\n", From 2a46534286f0f40a9b35adaf5b97a1ca4a8491be Mon Sep 17 00:00:00 2001 From: tomo-abe Date: Tue, 7 Jan 2025 23:47:23 +0900 Subject: [PATCH 03/14] Fix typo introduction.ipynb (#2894) Fixing typo --- docs/docs/tutorials/introduction.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/tutorials/introduction.ipynb b/docs/docs/tutorials/introduction.ipynb index c7bf12940..015ba5d0d 100644 --- a/docs/docs/tutorials/introduction.ipynb +++ b/docs/docs/tutorials/introduction.ipynb @@ -1659,7 +1659,7 @@ "id": "584de971-6b10-4931-986e-cc35f7adbb3d", "metadata": {}, "source": [ - "Now the graph is complete, since we've provided the final response message! Since state updates simulate a graph step, they even generate corresponding traces. Inspec the [LangSmith trace](https://smith.langchain.com/public/6d72aeb5-3bca-4090-8684-a11d5a36b10c/r) of the `update_state` call above to see what's going on.\n", + "Now the graph is complete, since we've provided the final response message! Since state updates simulate a graph step, they even generate corresponding traces. Inspect the [LangSmith trace](https://smith.langchain.com/public/6d72aeb5-3bca-4090-8684-a11d5a36b10c/r) of the `update_state` call above to see what's going on.\n", "\n", "**Notice** that our new messages are _appended_ to the messages already in the state. Remember how we defined the `State` type?\n", "\n", From a36d2ac77da4de1832171c9ec3286f45a3561bf6 Mon Sep 17 00:00:00 2001 From: merdan <48309329+merdan-9@users.noreply.github.com> Date: Tue, 7 Jan 2025 22:51:29 +0800 Subject: [PATCH 04/14] Update langgraph_agentic_rag.ipynb (#2885) add missing package --- docs/docs/tutorials/rag/langgraph_agentic_rag.ipynb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/docs/tutorials/rag/langgraph_agentic_rag.ipynb b/docs/docs/tutorials/rag/langgraph_agentic_rag.ipynb index c06368a25..d5a788b57 100644 --- a/docs/docs/tutorials/rag/langgraph_agentic_rag.ipynb +++ b/docs/docs/tutorials/rag/langgraph_agentic_rag.ipynb @@ -26,7 +26,7 @@ "outputs": [], "source": [ "%%capture --no-stderr\n", - "%pip install -U --quiet langchain-community tiktoken langchain-openai langchainhub chromadb langchain langgraph langchain-text-splitters" + "%pip install -U --quiet langchain-community tiktoken langchain-openai langchainhub chromadb langchain langgraph langchain-text-splitters beautifulsoup4" ] }, { From e00284b386964e15e24c76fbfa7c98c182854552 Mon Sep 17 00:00:00 2001 From: Abhishek Shirgaokar Date: Tue, 7 Jan 2025 20:34:50 +0530 Subject: [PATCH 05/14] Clarifying the docstring for the add_edge function (#2782) Revised docstring for StateGraph's add_edge method to clarify recurring confusion #2775 #1462 --------- Co-authored-by: ashirgaokar Co-authored-by: vbarda --- libs/langgraph/langgraph/graph/state.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/libs/langgraph/langgraph/graph/state.py b/libs/langgraph/langgraph/graph/state.py index e412db2d5..d5e4a5480 100644 --- a/libs/langgraph/langgraph/graph/state.py +++ b/libs/langgraph/langgraph/graph/state.py @@ -398,9 +398,11 @@ class StateGraph(Graph): return self def add_edge(self, start_key: Union[str, list[str]], end_key: str) -> Self: - """Adds a directed edge from the start node to the end node. + """Adds a directed edge from the start node (or list of start nodes) to the end node. - If the graph transitions to the start_key node, it will always transition to the end_key node next. + When a single start node is provided, the graph will wait for that node to complete + before executing the end node. When multiple start nodes are provided, + the graph will wait for ALL of the start nodes to complete before executing the end node. Args: start_key (Union[str, list[str]]): The key(s) of the start node(s) of the edge. From 3dbe37041a2430ddc3b7f3f3003fb7b532859f90 Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Tue, 7 Jan 2025 11:00:14 -0500 Subject: [PATCH 06/14] docs: readme nit (#2899) When looking at [docs](https://langchain-ai.github.io/langgraph/) this sentence is confusing, not clear there's two separate links or why one of them would lead to repo --- README.md | 2 +- libs/langgraph/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a05b4ce97..a6d4bcddb 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ ⚡ Building language agents as graphs ⚡ > [!NOTE] -> Looking for the JS version? Click [here](https://github.com/langchain-ai/langgraphjs) ([JS docs](https://langchain-ai.github.io/langgraphjs/)). +> Looking for the JS version? See the [JS repo](https://github.com/langchain-ai/langgraphjs) and the [JS docs](https://langchain-ai.github.io/langgraphjs/). ## Overview diff --git a/libs/langgraph/README.md b/libs/langgraph/README.md index a05b4ce97..a6d4bcddb 100644 --- a/libs/langgraph/README.md +++ b/libs/langgraph/README.md @@ -8,7 +8,7 @@ ⚡ Building language agents as graphs ⚡ > [!NOTE] -> Looking for the JS version? Click [here](https://github.com/langchain-ai/langgraphjs) ([JS docs](https://langchain-ai.github.io/langgraphjs/)). +> Looking for the JS version? See the [JS repo](https://github.com/langchain-ai/langgraphjs) and the [JS docs](https://langchain-ai.github.io/langgraphjs/). ## Overview From 8ab206043c25909f24090e7cebdcb3647bf70b2b Mon Sep 17 00:00:00 2001 From: Bagatur <22008038+baskaryan@users.noreply.github.com> Date: Tue, 7 Jan 2025 13:47:31 -0500 Subject: [PATCH 07/14] langgraph[patch]: fix create_react_agent inspectability (#2948) Co-authored-by: vbarda --- libs/langgraph/langgraph/prebuilt/chat_agent_executor.py | 8 ++++---- libs/langgraph/tests/test_prebuilt.py | 7 +++++++ 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/libs/langgraph/langgraph/prebuilt/chat_agent_executor.py b/libs/langgraph/langgraph/prebuilt/chat_agent_executor.py index da70f9e87..1b4797b80 100644 --- a/libs/langgraph/langgraph/prebuilt/chat_agent_executor.py +++ b/libs/langgraph/langgraph/prebuilt/chat_agent_executor.py @@ -554,6 +554,10 @@ def create_react_agent( ) model_runnable = preprocessor | model + # If any of the tools are configured to return_directly after running, + # our graph needs to check if these were called + should_return_direct = {t.name for t in tool_classes if t.return_direct} + # Define the function that calls the model def call_model(state: AgentState, config: RunnableConfig) -> AgentState: _validate_chat_history(state["messages"]) @@ -673,10 +677,6 @@ def create_react_agent( should_continue, ) - # If any of the tools are configured to return_directly after running, - # our graph needs to check if these were called - should_return_direct = {t.name for t in tool_classes if t.return_direct} - def route_tool_responses(state: AgentState) -> Literal["agent", "__end__"]: for m in reversed(state["messages"]): if not isinstance(m, ToolMessage): diff --git a/libs/langgraph/tests/test_prebuilt.py b/libs/langgraph/tests/test_prebuilt.py index ea44c4f0e..3186cac9e 100644 --- a/libs/langgraph/tests/test_prebuilt.py +++ b/libs/langgraph/tests/test_prebuilt.py @@ -1,4 +1,5 @@ import dataclasses +import inspect import json from functools import partial from typing import ( @@ -2040,3 +2041,9 @@ def test__get_state_args() -> None: return 0.0 assert _get_state_args(foo) == {"a": None, "b": "bar"} + + +def test_inspect_react() -> None: + model = FakeToolCallingModel(tool_calls=[]) + agent = create_react_agent(model, []) + inspect.getclosurevars(agent.nodes["agent"].bound.func) From e13261ac0ac11bf6581b0ef6e09818ec5ecd07fe Mon Sep 17 00:00:00 2001 From: Vadym Barda Date: Tue, 7 Jan 2025 20:09:57 -0500 Subject: [PATCH 08/14] ci: update langsmith and patch urllib3 vcr issues for notebook runner (#2949) --- docs/_scripts/_patch.py | 93 ++++++++++++++++++++++ docs/_scripts/prepare_notebooks_for_ci.py | 17 +++- poetry.lock | 95 +++++++++++++---------- pyproject.toml | 2 +- 4 files changed, 164 insertions(+), 43 deletions(-) create mode 100644 docs/_scripts/_patch.py diff --git a/docs/_scripts/_patch.py b/docs/_scripts/_patch.py new file mode 100644 index 000000000..4b8dd3a8c --- /dev/null +++ b/docs/_scripts/_patch.py @@ -0,0 +1,93 @@ +import functools + +from urllib3 import __version__ as urllib3version # type: ignore[import-untyped] +from urllib3 import connection # type: ignore[import-untyped] + + +def _ensure_str(s, encoding="utf-8", errors="strict") -> str: + if isinstance(s, str): + return s + + if isinstance(s, bytes): + return s.decode(encoding, errors) + return str(s) + + +# Copied from https://github.com/urllib3/urllib3/blob/1c994dfc8c5d5ecaee8ed3eb585d4785f5febf6e/src/urllib3/connection.py#L231 +def request(self, method, url, body=None, headers=None): + """Make the request. + + This function is based on the urllib3 request method, with modifications + to handle potential issues when using vcrpy in concurrent workloads. + + Args: + self: The HTTPConnection instance. + method (str): The HTTP method (e.g., 'GET', 'POST'). + url (str): The URL for the request. + body (Optional[Any]): The body of the request. + headers (Optional[dict]): Headers to send with the request. + + Returns: + The result of calling the parent request method. + """ + # Update the inner socket's timeout value to send the request. + # This only triggers if the connection is re-used. + if getattr(self, "sock", None) is not None: + self.sock.settimeout(self.timeout) + + if headers is None: + headers = {} + else: + # Avoid modifying the headers passed into .request() + headers = headers.copy() + if "user-agent" not in (_ensure_str(k.lower()) for k in headers): + headers["User-Agent"] = connection._get_default_user_agent() + # The above is all the same ^^^ + # The following is different: + return self._parent_request(method, url, body=body, headers=headers) + + +_PATCHED = False + + +def patch_urllib3(): + """Patch the request method of urllib3 to avoid type errors when using vcrpy. + + In concurrent workloads (such as the tracing background queue), the + connection pool can get in a state where an HTTPConnection is created + before vcrpy patches the HTTPConnection class. In urllib3 >= 2.0 this isn't + a problem since they use the proper super().request(...) syntax, but in older + versions, super(HTTPConnection, self).request is used, resulting in a TypeError + since self is no longer a subclass of "HTTPConnection" (which at this point + is vcr.stubs.VCRConnection). + + This method patches the class to fix the super() syntax to avoid mixed inheritance. + In the case of the LangSmith tracing logic, it doesn't really matter since we always + exclude cache checks for calls to LangSmith. + + The patch is only applied for urllib3 versions older than 2.0. + """ + global _PATCHED + if _PATCHED: + return + from packaging import version + + if version.parse(urllib3version) >= version.parse("2.0"): + _PATCHED = True + return + + # Lookup the parent class and its request method + parent_class = connection.HTTPConnection.__bases__[0] + parent_request = parent_class.request + + def new_request(self, *args, **kwargs): + """Handle parent request. + + This method binds the parent's request method to self and then + calls our modified request function. + """ + self._parent_request = functools.partial(parent_request, self) + return request(self, *args, **kwargs) + + connection.HTTPConnection.request = new_request + _PATCHED = True \ No newline at end of file diff --git a/docs/_scripts/prepare_notebooks_for_ci.py b/docs/_scripts/prepare_notebooks_for_ci.py index dfa1e1c70..697176c8c 100644 --- a/docs/_scripts/prepare_notebooks_for_ci.py +++ b/docs/_scripts/prepare_notebooks_for_ci.py @@ -43,7 +43,9 @@ NOTEBOOKS_NO_EXECUTION = [ "docs/docs/tutorials/lats/lats.ipynb", # issues only when running with VCR "docs/docs/tutorials/rag/langgraph_crag.ipynb", # flakiness from tavily "docs/docs/tutorials/rag/langgraph_adaptive_rag.ipynb", # Cannot create a consistent method resolution error from VCR - "docs/docs/how-tos/map-reduce.ipynb" # flakiness from structured output, only when running with VCR + "docs/docs/how-tos/map-reduce.ipynb", # flakiness from structured output, only when running with VCR + "docs/docs/tutorials/tot/tot.ipynb", + "docs/docs/how-tos/visualization.ipynb" ] @@ -86,6 +88,7 @@ def add_vcr_to_notebook( ) -> nbformat.NotebookNode: """Inject `with vcr.cassette` into each code cell of the notebook.""" + uses_langsmith = False # Inject VCR context manager into each code cell for idx, cell in enumerate(notebook.cells): if cell.cell_type != "code": @@ -120,6 +123,9 @@ def add_vcr_to_notebook( f" {line}" for line in lines ) + if any("hub.pull" in line or "from langsmith import" in line for line in lines): + uses_langsmith = True + # Add import statement vcr_import_lines = [ "import nest_asyncio", @@ -152,6 +158,15 @@ def add_vcr_to_notebook( "custom_vcr.register_serializer('advanced_compressed', AdvancedCompressedSerializer())", "custom_vcr.serializer = 'advanced_compressed'", ] + if uses_langsmith: + vcr_import_lines.extend( + # patch urllib3 to handle vcr errors, see more here: + # https://github.com/langchain-ai/langsmith-sdk/blob/main/python/langsmith/_internal/_patch.py + "import sys", + f"sys.path.insert(0, '{os.path.join(DOCS_PATH, '_scripts')}')", + "import _patch as patch_urllib3", + "patch_urllib3.patch_urllib3()", + ) import_cell = nbformat.v4.new_code_cell(source="\n".join(vcr_import_lines)) import_cell.pop("id", None) notebook.cells.insert(0, import_cell) diff --git a/poetry.lock b/poetry.lock index 400366540..74535df36 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.5 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "aiohappyeyeballs" @@ -2862,21 +2862,21 @@ adal = ["adal (>=1.0.2)"] [[package]] name = "langchain" -version = "0.3.9" +version = "0.3.14" description = "Building applications with LLMs through composability" optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "langchain-0.3.9-py3-none-any.whl", hash = "sha256:ade5a1fee2f94f2e976a6c387f97d62cc7f0b9f26cfe0132a41d2bda761e1045"}, - {file = "langchain-0.3.9.tar.gz", hash = "sha256:4950c4ad627d0aa95ce6bda7de453e22059b7e7836b562a8f781fb0b05d7294c"}, + {file = "langchain-0.3.14-py3-none-any.whl", hash = "sha256:5df9031702f7fe6c956e84256b4639a46d5d03a75be1ca4c1bc9479b358061a2"}, + {file = "langchain-0.3.14.tar.gz", hash = "sha256:4a5ae817b5832fa0e1fcadc5353fbf74bebd2f8e550294d4dc039f651ddcd3d1"}, ] [package.dependencies] aiohttp = ">=3.8.3,<4.0.0" async-timeout = {version = ">=4.0.0,<5.0.0", markers = "python_version < \"3.11\""} -langchain-core = ">=0.3.21,<0.4.0" -langchain-text-splitters = ">=0.3.0,<0.4.0" -langsmith = ">=0.1.17,<0.2.0" +langchain-core = ">=0.3.29,<0.4.0" +langchain-text-splitters = ">=0.3.3,<0.4.0" +langsmith = ">=0.1.17,<0.3" numpy = [ {version = ">=1.22.4,<2", markers = "python_version < \"3.12\""}, {version = ">=1.26.2,<3", markers = "python_version >= \"3.12\""}, @@ -2906,45 +2906,46 @@ pydantic = ">=2.7.4,<3.0.0" [[package]] name = "langchain-community" -version = "0.3.1" +version = "0.3.14" description = "Community contributed LangChain integrations." optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "langchain_community-0.3.1-py3-none-any.whl", hash = "sha256:627eb26c16417764762ac47dd0d3005109f750f40242a88bb8f2958b798bcf90"}, - {file = "langchain_community-0.3.1.tar.gz", hash = "sha256:c964a70628f266a61647e58f2f0434db633d4287a729f100a81dd8b0654aec93"}, + {file = "langchain_community-0.3.14-py3-none-any.whl", hash = "sha256:cc02a0abad0551edef3e565dff643386a5b2ee45b933b6d883d4a935b9649f3c"}, + {file = "langchain_community-0.3.14.tar.gz", hash = "sha256:d8ba0fe2dbb5795bff707684b712baa5ee379227194610af415ccdfdefda0479"}, ] [package.dependencies] aiohttp = ">=3.8.3,<4.0.0" dataclasses-json = ">=0.5.7,<0.7" -langchain = ">=0.3.1,<0.4.0" -langchain-core = ">=0.3.6,<0.4.0" -langsmith = ">=0.1.125,<0.2.0" +httpx-sse = ">=0.4.0,<0.5.0" +langchain = ">=0.3.14,<0.4.0" +langchain-core = ">=0.3.29,<0.4.0" +langsmith = ">=0.1.125,<0.3" numpy = [ - {version = ">=1,<2", markers = "python_version < \"3.12\""}, - {version = ">=1.26.0,<2.0.0", markers = "python_version >= \"3.12\""}, + {version = ">=1.22.4,<2", markers = "python_version < \"3.12\""}, + {version = ">=1.26.2,<3", markers = "python_version >= \"3.12\""}, ] pydantic-settings = ">=2.4.0,<3.0.0" PyYAML = ">=5.3" requests = ">=2,<3" SQLAlchemy = ">=1.4,<3" -tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" +tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<10" [[package]] name = "langchain-core" -version = "0.3.23" +version = "0.3.29" description = "Building applications with LLMs through composability" optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "langchain_core-0.3.23-py3-none-any.whl", hash = "sha256:550c0b996990830fa6515a71a1192a8a0343367999afc36d4ede14222941e420"}, - {file = "langchain_core-0.3.23.tar.gz", hash = "sha256:f9e175e3b82063cc3b160c2ca2b155832e1c6f915312e1204828f97d4aabf6e1"}, + {file = "langchain_core-0.3.29-py3-none-any.whl", hash = "sha256:817db1474871611a81105594a3e4d11704949661008e455a10e38ca9ff601a1a"}, + {file = "langchain_core-0.3.29.tar.gz", hash = "sha256:773d6aeeb612e7ce3d996c0be403433d8c6a91e77bbb7a7461c13e15cfbe5b06"}, ] [package.dependencies] jsonpatch = ">=1.33,<2.0" -langsmith = ">=0.1.125,<0.2.0" +langsmith = ">=0.1.125,<0.3" packaging = ">=23.2,<25" pydantic = [ {version = ">=2.5.2,<3.0.0", markers = "python_full_version < \"3.12.4\""}, @@ -3021,21 +3022,21 @@ tiktoken = ">=0.7,<1" [[package]] name = "langchain-text-splitters" -version = "0.3.0" +version = "0.3.5" description = "LangChain text splitting utilities" optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "langchain_text_splitters-0.3.0-py3-none-any.whl", hash = "sha256:e84243e45eaff16e5b776cd9c81b6d07c55c010ebcb1965deb3d1792b7358e83"}, - {file = "langchain_text_splitters-0.3.0.tar.gz", hash = "sha256:f9fe0b4d244db1d6de211e7343d4abc4aa90295aa22e1f0c89e51f33c55cd7ce"}, + {file = "langchain_text_splitters-0.3.5-py3-none-any.whl", hash = "sha256:8c9b059827438c5fa8f327b4df857e307828a5ec815163c9b5c9569a3e82c8ee"}, + {file = "langchain_text_splitters-0.3.5.tar.gz", hash = "sha256:11cb7ca3694e5bdd342bc16d3875b7f7381651d4a53cbb91d34f22412ae16443"}, ] [package.dependencies] -langchain-core = ">=0.3.0,<0.4.0" +langchain-core = ">=0.3.29,<0.4.0" [[package]] name = "langgraph" -version = "0.2.59" +version = "0.2.61" description = "Building stateful, multi-actor applications with LLMs" optional = false python-versions = ">=3.9.0,<4.0" @@ -3053,7 +3054,7 @@ url = "libs/langgraph" [[package]] name = "langgraph-checkpoint" -version = "2.0.8" +version = "2.0.9" description = "Library with base interfaces for LangGraph checkpoint savers." optional = false python-versions = "^3.9.0,<4.0" @@ -3087,7 +3088,7 @@ pymongo = ">=4.9.0,<4.10.0" [[package]] name = "langgraph-checkpoint-postgres" -version = "2.0.8" +version = "2.0.9" description = "Library with a Postgres implementation of LangGraph checkpoint saver." optional = false python-versions = "^3.9.0,<4.0" @@ -3123,7 +3124,7 @@ url = "libs/checkpoint-sqlite" [[package]] name = "langgraph-sdk" -version = "0.1.43" +version = "0.1.49" description = "SDK for interacting with LangGraph API" optional = false python-versions = "^3.9.0,<4.0" @@ -3140,23 +3141,28 @@ url = "libs/sdk-py" [[package]] name = "langsmith" -version = "0.1.129" +version = "0.2.10" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false -python-versions = "<4.0,>=3.8.1" +python-versions = "<4.0,>=3.9" files = [ - {file = "langsmith-0.1.129-py3-none-any.whl", hash = "sha256:31393fbbb17d6be5b99b9b22d530450094fab23c6c37281a6a6efb2143d05347"}, - {file = "langsmith-0.1.129.tar.gz", hash = "sha256:6c3ba66471bef41b9f87da247cc0b493268b3f54656f73648a256a205261b6a0"}, + {file = "langsmith-0.2.10-py3-none-any.whl", hash = "sha256:b02f2f174189ff72e54c88b1aa63343defd6f0f676c396a690c63a4b6495dcc2"}, + {file = "langsmith-0.2.10.tar.gz", hash = "sha256:153c7b3ccbd823528ff5bec84801e7e50a164e388919fc583252df5b27dd7830"}, ] [package.dependencies] httpx = ">=0.23.0,<1" -orjson = ">=3.9.14,<4.0.0" +orjson = {version = ">=3.9.14,<4.0.0", markers = "platform_python_implementation != \"PyPy\""} pydantic = [ {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, ] requests = ">=2,<3" +requests-toolbelt = ">=1.0.0,<2.0.0" + +[package.extras] +compression = ["zstandard (>=0.23.0,<0.24.0)"] +langsmith-pyo3 = ["langsmith-pyo3 (>=0.1.0rc2,<0.2.0)"] [[package]] name = "loguru" @@ -5114,7 +5120,6 @@ description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs optional = false python-versions = ">=3.8" files = [ - {file = "pyasn1-0.6.1-py3-none-any.whl", hash = "sha256:0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629"}, {file = "pyasn1-0.6.1.tar.gz", hash = "sha256:6f580d2bdd84365380830acf45550f2511469f673cb4a5ae3857a3170128b034"}, ] @@ -5125,7 +5130,6 @@ description = "A collection of ASN.1-based protocols modules" optional = false python-versions = ">=3.8" files = [ - {file = "pyasn1_modules-0.4.1-py3-none-any.whl", hash = "sha256:49bfa96b45a292b711e986f222502c1c9a5e1f4e568fc30e2574a6c7d07838fd"}, {file = "pyasn1_modules-0.4.1.tar.gz", hash = "sha256:c28e2dbf9c06ad61c71a075c7e0f9fd0f1b0bb2d2ad4377f240d33ac2ab60a7c"}, ] @@ -5967,6 +5971,20 @@ requests = ">=2.0.0" [package.extras] rsa = ["oauthlib[signedtoken] (>=3.0.0)"] +[[package]] +name = "requests-toolbelt" +version = "1.0.0" +description = "A utility belt for advanced users of python-requests" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +files = [ + {file = "requests-toolbelt-1.0.0.tar.gz", hash = "sha256:7681a0a3d047012b5bdc0ee37d7f8f07ebe76ab08caeccfc3921ce23c88d5bc6"}, + {file = "requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06"}, +] + +[package.dependencies] +requests = ">=2.0.1,<3.0.0" + [[package]] name = "rfc3339-validator" version = "0.1.4" @@ -6185,11 +6203,6 @@ files = [ {file = "scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f60021ec1574e56632be2a36b946f8143bf4e5e6af4a06d85281adc22938e0dd"}, {file = "scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:394397841449853c2290a32050382edaec3da89e35b3e03d6cc966aebc6a8ae6"}, {file = "scikit_learn-1.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:57cc1786cfd6bd118220a92ede80270132aa353647684efa385a74244a41e3b1"}, - {file = "scikit_learn-1.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9a702e2de732bbb20d3bad29ebd77fc05a6b427dc49964300340e4c9328b3f5"}, - {file = "scikit_learn-1.5.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:b0768ad641981f5d3a198430a1d31c3e044ed2e8a6f22166b4d546a5116d7908"}, - {file = "scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:178ddd0a5cb0044464fc1bfc4cca5b1833bfc7bb022d70b05db8530da4bb3dd3"}, - {file = "scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7284ade780084d94505632241bf78c44ab3b6f1e8ccab3d2af58e0e950f9c12"}, - {file = "scikit_learn-1.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:b7b0f9a0b1040830d38c39b91b3a44e1b643f4b36e36567b80b7c6bd2202a27f"}, {file = "scikit_learn-1.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:757c7d514ddb00ae249832fe87100d9c73c6ea91423802872d9e74970a0e40b9"}, {file = "scikit_learn-1.5.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:52788f48b5d8bca5c0736c175fa6bdaab2ef00a8f536cda698db61bd89c551c1"}, {file = "scikit_learn-1.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:643964678f4b5fbdc95cbf8aec638acc7aa70f5f79ee2cdad1eec3df4ba6ead8"}, @@ -7492,4 +7505,4 @@ type = ["pytest-mypy"] [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "367f5fb480a8fa5d8ab1c0964a1e9450dbb28e6998097e7536966e7a5fe30c90" +content-hash = "981f40de9c31530b17537a089651f9e51901b945fbc01b43ac33a466c8a7d9eb" diff --git a/pyproject.toml b/pyproject.toml index ed09fc121..478880726 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -42,7 +42,7 @@ langchain-fireworks = "^0.2.0" langchain-community = "^0.3.0" langchain-experimental = "^0.3.2" langgraph-checkpoint-mongodb = "^0.1.0" -langsmith = "^0.1.129" +langsmith = "^0.2.0" chromadb = "^0.5.5" gpt4all = "^2.8.2" scikit-learn = "^1.5.2" From 837f215857455ed8dfda27a804099ac2d680108d Mon Sep 17 00:00:00 2001 From: Andrew Nguonly Date: Tue, 7 Jan 2025 17:13:06 -0800 Subject: [PATCH 09/14] docs: Rename `Deploy Logs` to `Server Logs` (#2922) --- docs/docs/cloud/deployment/cloud.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/docs/docs/cloud/deployment/cloud.md b/docs/docs/cloud/deployment/cloud.md index 754104702..ddf8e63a5 100644 --- a/docs/docs/cloud/deployment/cloud.md +++ b/docs/docs/cloud/deployment/cloud.md @@ -11,7 +11,7 @@ LangGraph Cloud is available within LangSmith UI... -1. In the left-hand navigation panel, select `LangGraph Cloud`. The `LangGraph Cloud` view contains a list of existing LangGraph Cloud deployments. +1. In the left-hand navigation panel, select `LangGraph Platform`. The `LangGraph Platform` view contains a list of existing LangGraph Cloud deployments. 1. In the top-right corner, select `+ New Deployment` to create a new deployment. 1. In the `Create New Deployment` panel, fill out the required fields. 1. `Deployment details` @@ -38,7 +38,7 @@ When [creating a new deployment](#create-new-deployment), a new revision is crea Starting from the LangSmith UI... -1. In the left-hand navigation panel, select `LangGraph Cloud`. The `LangGraph Cloud` view contains a list of existing LangGraph Cloud deployments. +1. In the left-hand navigation panel, select `LangGraph Platform`. The `LangGraph Platform` view contains a list of existing LangGraph Cloud deployments. 1. Select an existing deployment to create a new revision for. 1. In the `Deployment` view, in the top-right corner, select `+ New Revision`. 1. In the `New Revision` modal, fill out the required fields. @@ -52,15 +52,15 @@ Starting from the LangSmi 1. Update the value of existing secrets or environment variables. 1. Select `Submit`. After a few seconds, the `New Revision` modal will close and the new revision will be queued for deployment. -## View Build and Deployment Logs +## View Build and Server Logs -Build and deployment logs are available for each revision. +Build and server logs are available for each revision. -Starting from the `LangGraph Cloud` view... +Starting from the `LangGraph Platform` view... 1. Select the desired revision from the `Revisions` table. A panel slides open from the right-hand side and the `Build` tab is selected by default, which displays build logs for the revision. -1. In the panel, select the `Deploy` tab to view deployment logs for the revision. -1. Within the `Deploy` tab, adjust the date/time range picker as needed. By default, the date/time range picker is set to the `Last 15 minutes`. +1. In the panel, select the `Server` tab to view server logs for the revision. Server logs are only available after a revision has been deployed. +1. Within the `Server` tab, adjust the date/time range picker as needed. By default, the date/time range picker is set to the `Last 7 days`. ## Interrupt Revision @@ -69,7 +69,7 @@ Interrupting a revision will stop deployment of the revision. !!! warning "Undefined Behavior" Interrupted revisions have undefined behavior. This is only useful if you need to deploy a new revision and you already have a revision "stuck" in progress. In the future, this feature may be removed. -Starting from the `LangGraph Cloud` view... +Starting from the `LangGraph Platform` view... 1. Select the menu icon (three dots) on the right-hand side of the row for the desired revision from the `Revisions` table. 1. Select `Interrupt` from the menu. @@ -79,13 +79,13 @@ Starting from the `LangGraph Cloud` view... Starting from the LangSmith UI... -1. In the left-hand navigation panel, select `LangGraph Cloud`. The `LangGraph Cloud` view contains a list of existing LangGraph Cloud deployments. +1. In the left-hand navigation panel, select `LangGraph Platform`. The `LangGraph Platform` view contains a list of existing LangGraph Cloud deployments. 1. Select the menu icon (three dots) on the right-hand side of the row for the desired deployment and select `Delete`. 1. A `Confirmation` modal will appear. Select `Delete`. ## Deployment Settings -Starting from the `LangGraph Cloud` view... +Starting from the `LangGraph Platform` view... 1. In the top-right corner, select the gear icon (`Deployment Settings`). 1. Update the `Git Branch` to the desired branch. From 9680e35bebc768b000a38e05e78038d1920d1bd2 Mon Sep 17 00:00:00 2001 From: Vadym Barda Date: Wed, 8 Jan 2025 09:33:25 -0500 Subject: [PATCH 10/14] docs: update tool in customer support tutorial (#2956) Fixes #2952 --- docs/docs/tutorials/customer-support/customer-support.ipynb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/docs/tutorials/customer-support/customer-support.ipynb b/docs/docs/tutorials/customer-support/customer-support.ipynb index 07fff6f97..6baa8a929 100644 --- a/docs/docs/tutorials/customer-support/customer-support.ipynb +++ b/docs/docs/tutorials/customer-support/customer-support.ipynb @@ -444,7 +444,7 @@ "\n", " # Check the signed-in user actually has this ticket\n", " cursor.execute(\n", - " \"SELECT flight_id FROM tickets WHERE ticket_no = ? AND passenger_id = ?\",\n", + " \"SELECT ticket_no FROM tickets WHERE ticket_no = ? AND passenger_id = ?\",\n", " (ticket_no, passenger_id),\n", " )\n", " current_ticket = cursor.fetchone()\n", @@ -4444,7 +4444,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.9" + "version": "3.12.3" } }, "nbformat": 4, From 1546eddfbe257e4995edc9a21829fee8a4b66966 Mon Sep 17 00:00:00 2001 From: Vadym Barda Date: Wed, 8 Jan 2025 10:58:07 -0500 Subject: [PATCH 11/14] sdk-js: add stream mode and stream subgraphs to runs.create (#2958) --- libs/sdk-js/src/client.ts | 2 ++ libs/sdk-js/src/types.ts | 30 ++++++++++++++++++++++-------- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/libs/sdk-js/src/client.ts b/libs/sdk-js/src/client.ts index 581145229..b340274ca 100644 --- a/libs/sdk-js/src/client.ts +++ b/libs/sdk-js/src/client.ts @@ -817,6 +817,8 @@ export class RunsClient extends BaseClient { command: payload?.command, config: payload?.config, metadata: payload?.metadata, + stream_mode: payload?.streamMode, + stream_subgraphs: payload?.streamSubgraphs, assistant_id: assistantId, interrupt_before: payload?.interruptBefore, interrupt_after: payload?.interruptAfter, diff --git a/libs/sdk-js/src/types.ts b/libs/sdk-js/src/types.ts index 116a1d244..27e5c1857 100644 --- a/libs/sdk-js/src/types.ts +++ b/libs/sdk-js/src/types.ts @@ -1,5 +1,15 @@ import { Checkpoint, Config, Metadata } from "./schema.js"; +/** + * Stream modes + * - "values": Stream only the state values. + * - "messages": Stream complete messages. + * - "messages-tuple": Stream (message chunk, metadata) tuples. + * - "updates": Stream updates to the state. + * - "events": Stream events occurring during execution. + * - "debug": Stream detailed debug information. + * - "custom": Stream custom events. + */ export type StreamMode = | "values" | "messages" @@ -140,13 +150,7 @@ interface RunsInvokePayload { export interface RunsStreamPayload extends RunsInvokePayload { /** - * One of `"values"`, `"messages"`, `"updates"` or `"events"`. - * - `"values"`: Stream the thread state any time it changes. - * - `"messages"`: Stream chat messages from thread state and calls to chat models, - * token-by-token where possible. - * - `"updates"`: Stream the state updates returned by each node. - * - `"events"`: Stream all events produced by the run. You can also access these - * afterwards using the `client.runs.listEvents()` method. + * One of `"values"`, `"messages"`, `"messages-tuple"`, `"updates"`, `"events"`, `"debug"`, `"custom"`. */ streamMode?: StreamMode | Array; @@ -162,7 +166,17 @@ export interface RunsStreamPayload extends RunsInvokePayload { feedbackKeys?: string[]; } -export interface RunsCreatePayload extends RunsInvokePayload {} +export interface RunsCreatePayload extends RunsInvokePayload { + /** + * One of `"values"`, `"messages"`, `"messages-tuple"`, `"updates"`, `"events"`, `"debug"`, `"custom"`. + */ + streamMode?: StreamMode | Array; + + /** + * Stream output from subgraphs. By default, streams only the top graph. + */ + streamSubgraphs?: boolean; +} export interface CronsCreatePayload extends RunsCreatePayload { /** From 8b29dc81e0edfaef8e59e034b10603a3878cd233 Mon Sep 17 00:00:00 2001 From: Vadym Barda Date: Wed, 8 Jan 2025 10:59:40 -0500 Subject: [PATCH 12/14] sdk-js: release 0.0.34 (#2959) --- libs/sdk-js/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/sdk-js/package.json b/libs/sdk-js/package.json index 727faaec0..5d27f6501 100644 --- a/libs/sdk-js/package.json +++ b/libs/sdk-js/package.json @@ -1,6 +1,6 @@ { "name": "@langchain/langgraph-sdk", - "version": "0.0.33", + "version": "0.0.34", "description": "Client library for interacting with the LangGraph API", "type": "module", "packageManager": "yarn@1.22.19", From c14bcb6e9f0c6a78bcc70786918d1cb04b6d5019 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 8 Jan 2025 17:31:13 -0500 Subject: [PATCH 13/14] build(deps-dev): bump jinja2 from 3.1.4 to 3.1.5 in /libs/langgraph (#2960) Bumps [jinja2](https://github.com/pallets/jinja) from 3.1.4 to 3.1.5.
Release notes

Sourced from jinja2's releases.

3.1.5

This is the Jinja 3.1.5 security fix release, which fixes security issues and bugs but does not otherwise change behavior and should not result in breaking changes compared to the latest feature release.

PyPI: https://pypi.org/project/Jinja2/3.1.5/ Changes: https://jinja.palletsprojects.com/changes/#version-3-1-5 Milestone: https://github.com/pallets/jinja/milestone/16?closed=1

  • The sandboxed environment handles indirect calls to str.format, such as by passing a stored reference to a filter that calls its argument. GHSA-q2x7-8rv6-6q7h
  • Escape template name before formatting it into error messages, to avoid issues with names that contain f-string syntax. #1792, GHSA-gmj6-6f8f-6699
  • Sandbox does not allow clear and pop on known mutable sequence types. #2032
  • Calling sync render for an async template uses asyncio.run. #1952
  • Avoid unclosed auto_aiter warnings. #1960
  • Return an aclose-able AsyncGenerator from Template.generate_async. #1960
  • Avoid leaving root_render_func() unclosed in Template.generate_async. #1960
  • Avoid leaving async generators unclosed in blocks, includes and extends. #1960
  • The runtime uses the correct concat function for the current environment when calling block references. #1701
  • Make |unique async-aware, allowing it to be used after another async-aware filter. #1781
  • |int filter handles OverflowError from scientific notation. #1921
  • Make compiling deterministic for tuple unpacking in a {% set ... %} call. #2021
  • Fix dunder protocol (copy/pickle/etc) interaction with Undefined objects. #2025
  • Fix copy/pickle support for the internal missing object. #2027
  • Environment.overlay(enable_async) is applied correctly. #2061
  • The error message from FileSystemLoader includes the paths that were searched. #1661
  • PackageLoader shows a clearer error message when the package does not contain the templates directory. #1705
  • Improve annotations for methods returning copies. #1880
  • urlize does not add mailto: to values like @a@b. #1870
  • Tests decorated with @pass_context can be used with the |select filter. #1624
  • Using set for multiple assignment (a, b = 1, 2) does not fail when the target is a namespace attribute. #1413
  • Using set in all branches of {% if %}{% elif %}{% else %} blocks does not cause the variable to be considered initially undefined. #1253
Changelog

Sourced from jinja2's changelog.

Version 3.1.5

Released 2024-12-21

  • The sandboxed environment handles indirect calls to str.format, such as by passing a stored reference to a filter that calls its argument. :ghsa:q2x7-8rv6-6q7h
  • Escape template name before formatting it into error messages, to avoid issues with names that contain f-string syntax. :issue:1792, :ghsa:gmj6-6f8f-6699
  • Sandbox does not allow clear and pop on known mutable sequence types. :issue:2032
  • Calling sync render for an async template uses asyncio.run. :pr:1952
  • Avoid unclosed auto_aiter warnings. :pr:1960
  • Return an aclose-able AsyncGenerator from Template.generate_async. :pr:1960
  • Avoid leaving root_render_func() unclosed in Template.generate_async. :pr:1960
  • Avoid leaving async generators unclosed in blocks, includes and extends. :pr:1960
  • The runtime uses the correct concat function for the current environment when calling block references. :issue:1701
  • Make |unique async-aware, allowing it to be used after another async-aware filter. :issue:1781
  • |int filter handles OverflowError from scientific notation. :issue:1921
  • Make compiling deterministic for tuple unpacking in a {% set ... %} call. :issue:2021
  • Fix dunder protocol (copy/pickle/etc) interaction with Undefined objects. :issue:2025
  • Fix copy/pickle support for the internal missing object. :issue:2027
  • Environment.overlay(enable_async) is applied correctly. :pr:2061
  • The error message from FileSystemLoader includes the paths that were searched. :issue:1661
  • PackageLoader shows a clearer error message when the package does not contain the templates directory. :issue:1705
  • Improve annotations for methods returning copies. :pr:1880
  • urlize does not add mailto: to values like @a@b. :pr:1870
  • Tests decorated with @pass_context`` can be used with the ``|select`` filter. :issue:1624`
  • Using set for multiple assignment (a, b = 1, 2) does not fail when the target is a namespace attribute. :issue:1413
  • Using set in all branches of {% if %}{% elif %}{% else %} blocks does not cause the variable to be considered initially undefined. :issue:1253
Commits
  • 877f6e5 release version 3.1.5
  • 8d58859 remove test pypi
  • eda8fe8 update dev dependencies
  • c8fdce1 Fix bug involving calling set on a template parameter within all branches of ...
  • 66587ce Fix bug where set would sometimes fail within if
  • fbc3a69 Add support for namespaces in tuple parsing (#1664)
  • b8f4831 more comments about nsref assignment
  • ee83219 Add support for namespaces in tuple assignment
  • 1d55cdd Triple quotes in docs (#2064)
  • 8a8eafc edit block assignment section
  • Additional commits viewable in compare view

[![Dependabot compatibility score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=jinja2&package-manager=pip&previous-version=3.1.4&new-version=3.1.5)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores) Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting `@dependabot rebase`. [//]: # (dependabot-automerge-start) [//]: # (dependabot-automerge-end) ---
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency - `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself) - `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself) You can disable automated security fix PRs for this repo from the [Security Alerts page](https://github.com/langchain-ai/langgraph/network/alerts).
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- libs/langgraph/poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/libs/langgraph/poetry.lock b/libs/langgraph/poetry.lock index 52b500985..09f61d3df 100644 --- a/libs/langgraph/poetry.lock +++ b/libs/langgraph/poetry.lock @@ -965,13 +965,13 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] [[package]] name = "jinja2" -version = "3.1.4" +version = "3.1.5" description = "A very fast and expressive template engine." optional = false python-versions = ">=3.7" files = [ - {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, - {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, + {file = "jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb"}, + {file = "jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb"}, ] [package.dependencies] From b633e0a4edf95f57427df4f2ca92e2971c794b4a Mon Sep 17 00:00:00 2001 From: Andrew Nguonly Date: Wed, 8 Jan 2025 15:27:32 -0800 Subject: [PATCH 14/14] docs: Add docs for `POSTGRES_URI_CUSTOM` environment variable (#2951) --- docs/docs/cloud/reference/env_var.md | 28 ++++++++++++++++++++-- docs/docs/concepts/bring_your_own_cloud.md | 1 + 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/docs/docs/cloud/reference/env_var.md b/docs/docs/cloud/reference/env_var.md index 4d6be34e3..8f0c4c641 100644 --- a/docs/docs/cloud/reference/env_var.md +++ b/docs/docs/cloud/reference/env_var.md @@ -1,6 +1,6 @@ # Environment Variables -The LangGraph Cloud API supports specific environment variables for configuring a deployment. +The LangGraph Cloud Server supports specific environment variables for configuring a deployment. ## `LANGCHAIN_TRACING_SAMPLING_RATE` @@ -10,10 +10,34 @@ See