Compare commits

...
Author SHA1 Message Date
Vadym BardaandGitHub adff439d4e langgraph: release 0.2.63 (#3064) 2025-01-16 09:19:25 -05:00
Vadym BardaandGitHub 89b0be3a7d checkpoint-postgres: release 2.0.13 (#3063) 2025-01-16 09:17:43 -05:00
Vadym BardaandGitHub 7ecda42b42 checkpoint-postgres: bring back missing migration (#3058) 2025-01-16 03:16:28 +00:00
Nuno CamposandGitHub bd99471705 tests: Add test for catching bunching in streaming (#3057) 2025-01-15 18:57:07 -08:00
Nuno Campos 0e4dbb4c62 Guard 2025-01-15 18:36:49 -08:00
Nuno Campos 145220f2a8 Fix 2025-01-15 18:29:34 -08:00
Eugene Yurtsev f9c25bba07 x 2025-01-15 21:15:38 -05:00
Eugene Yurtsev 7ecad39ecb x 2025-01-15 21:15:05 -05:00
Nuno CamposandGitHub 6bfc6be307 Add support for multiple subgraphs called in a single node (#3056) 2025-01-15 18:01:31 -08:00
Nuno Campos 6b9369876f Fix sync 2025-01-15 17:52:19 -08:00
Nuno Campos c26b0e78b6 Fix kafka lib 2025-01-15 17:15:58 -08:00
Nuno CamposandGitHub 1763dd69a7 Add checkpointer=True mode for subgraphs that want to keep state between turns (#3055) 2025-01-15 16:08:03 -08:00
Nuno Campos f4bd023ab1 Fix 2025-01-15 16:04:14 -08:00
Nuno Campos d402bf7379 Remove flag 2025-01-15 15:36:16 -08:00
Nuno Campos e8a73e1505 Remove flag 2025-01-15 15:36:10 -08:00
Nuno Campos d6492ef048 Add support for multiple subgraphs called in a single node 2025-01-15 15:36:10 -08:00
Nuno Campos 38d9b39f6e Add flag 2025-01-15 15:36:03 -08:00
Nuno Campos be8b4a1d7f Lint 2025-01-15 15:30:29 -08:00
Nuno Campos 71fbd6a8b4 Lint 2025-01-15 15:29:34 -08:00
Nuno Campos 5375af7827 Add checkpointer=True mode for subgraphs that want to keep state betweenn turns 2025-01-15 15:15:44 -08:00
Nuno CamposandGitHub dd7ac00953 Fix unexpected re-use of null resume value by subgraphs (#3054)
- Also stop exposing writes in config, in favor of scratchpad
2025-01-15 13:59:13 -08:00
Nuno Campos cd64075928 Lint 2025-01-15 13:49:33 -08:00
Nuno Campos 144ee31546 Lint 2025-01-15 13:43:14 -08:00
Nuno CamposandGitHub 8bb84c7096 Fix ignored goto when a mixed list of command and state updates is returned from a node (#3038) 2025-01-15 13:39:59 -08:00
Nuno Campos e83660885b Lint 2025-01-15 13:39:44 -08:00
Nuno Campos c2a57385c0 Update tests 2025-01-15 13:35:51 -08:00
Nuno Campos 3626478029 Fix unexpected re-use of null resume value by subgraphs
- Also stop exposing writes in config, in favor of scratchpad
2025-01-15 13:31:49 -08:00
Brace SproulandGitHub 13c9bfa282 feat(langgraph): Add interrupt schema to library (#2947) 2025-01-15 12:55:47 -08:00
Andrew NguonlyandGitHub b6fe3937fc docs: Add section about Persistence to Cloud SaaS concepts page (#3051) 2025-01-15 12:27:53 -08:00
Nuno Campos 5805e5709a Fix ignored goto when a mixed list of command and state updates is returned from a node 2025-01-15 11:42:28 -08:00
Nuno CamposandGitHub aab6fdf3f3 Fix Send order after interrupt/resume (#3037)
- order was incorrectly based on task id, instead of the correct task
path
- this requires storing task paths on checkpointers
- addition of task_path to put_writes is made backwards compatible by
checking signature on call, and treating it as an optional arg
2025-01-15 11:42:08 -08:00
Nuno CamposandGitHub be1d035aba tests: add test for multiple interrupts and tasks (#2941) 2025-01-15 11:41:30 -08:00
Nuno Campos 6e228f8a9c Lint 2025-01-15 11:32:42 -08:00
Nuno Campos 0adbd89d9a Bump checkpoint 2025-01-15 11:28:55 -08:00
Nuno Campos 47c37d140f Fix Send order after interrupt/resume
- order was incorrectly based on task id, instead of the correct task path
- this requires storing task paths on checkpointers
- addition of task_path to put_writes is made backwards compatible by checking signature on call, and treating it as an optinal arg
2025-01-15 11:28:26 -08:00
Nuno Campos fc887f7a5d checkpoint-postgres/sqlite 2.0.12/2.0.3 2025-01-15 11:26:51 -08:00
ccurmeandGitHub bbfc2b7370 docs[patch]: add section headers to LangGraph concepts page (#3047)
![Screenshot 2025-01-15 at 1 03
45 PM](https://github.com/user-attachments/assets/c7a6d5b7-cc42-4616-bba0-4352c2f922bc)
2025-01-15 14:15:33 -05:00
Nuno Campos 2c984dfe4e checkpoint 2.0.10 2025-01-15 11:14:03 -08:00
Nuno CamposandGitHub 09c0d9cec3 Add optional task_path arg for put_writes() (#3049)
- Will be used for sorting pending_sends when available
2025-01-15 11:11:10 -08:00
Nuno Campos 31734fb792 Lint 2025-01-15 11:02:10 -08:00
Nuno Campos eed577ee2a Update sqlite signature 2025-01-15 10:58:46 -08:00
Nuno Campos bba00506ea Lint 2025-01-15 10:57:26 -08:00
Nuno Campos fa12538a4e Lint 2025-01-15 10:50:11 -08:00
Nuno Campos c1a7bb8902 Lint 2025-01-15 10:49:47 -08:00
Nuno Campos 14b500d8a8 Fix 2025-01-15 10:47:09 -08:00
Nuno Campos 053a501db3 Add optional task_path arg for put_writes()
- Will be used for sorting pending_sends when available
2025-01-15 10:42:54 -08:00
Andrew NguonlyandGitHub bbe8eacf8d docs: Update Studio FAQ (#3048)
### Screenshot

![image](https://github.com/user-attachments/assets/6da2faa6-1c62-44e4-96f8-3450f94cb15c)
2025-01-15 10:23:43 -08:00
Nuno Campos 931d39124c Fix 2025-01-15 10:23:30 -08:00
Nuno Campos a7bb96da98 Fix 2025-01-15 10:21:40 -08:00
Nuno Campos 1e9a372dd7 Fix multiple interrupt/task test 2025-01-15 10:11:31 -08:00
Chester Curme 5030f1e89c bold -> headers 2025-01-15 13:02:59 -05:00
Nuno CamposandGitHub 50cb387904 Remove duckdb checkpointer and store (#3046)
- duckdb is too buggy to be able to provide reliable checkpointer and
store
2025-01-15 09:23:49 -08:00
Nuno Campos 003b1883c9 Remove duckdb checkpointer and store
- duckdb is too buggy to be able to provide reliable checkpointer and store
2025-01-15 09:15:17 -08:00
Nuno Campos 17aebb6239 Fix flasy return from task 2025-01-15 09:14:36 -08:00
Nuno CamposandGitHub d12830e95c Fix tracing hierarchy for imperative api (#3036) 2025-01-15 09:10:45 -08:00
Eugene YurtsevandNuno Campos 29b70cbf39 x 2025-01-15 09:03:46 -08:00
Eugene YurtsevandNuno Campos 6b86fbb0a8 x 2025-01-15 09:03:46 -08:00
Nuno CamposandGitHub 4426552c26 Fix flaky test output order (#3045) 2025-01-15 09:02:05 -08:00
Nuno Campos 671f268651 Remove duckdb checkpointer and store
- duckdb is too buggy to be able to provide reliable checkpointer and store
2025-01-15 08:56:32 -08:00
Vadym BardaandGitHub e2554c9616 langgraph: fix non-empty value check in ensure_config (#3039)
Fixes https://github.com/langchain-ai/langgraph/issues/2890
2025-01-15 16:54:31 +00:00
Nuno CamposandGitHub f1ee650489 Remove CI job to test against core 0.2.x (#3044) 2025-01-15 08:52:58 -08:00
Nuno Campos b7e4656c91 Fix flaky test output order 2025-01-15 08:45:35 -08:00
Nuno Campos 65a41942ef Remove CI job to test against core 0.2.x 2025-01-15 08:39:09 -08:00
Nuno Campos c767d86c9c Remove ci job for removed flag 2025-01-15 08:37:24 -08:00
Nuno Campos 01331ef858 Lint 2025-01-15 08:33:09 -08:00
Nuno CamposandGitHub 24a4c67c52 Merge branch 'main' into nc/14jan/fix-tracing-hierarchy-imperative 2025-01-15 08:31:38 -08:00
Nuno CamposandGitHub c7e43f86d4 Remove send v2 (#3033) 2025-01-15 08:29:05 -08:00
Vadym BardaandGitHub b18d266f2c langgraph: allow model names as strings in create_react_agent (#3031)
```python
agent = create_react_agent("anthropic:claude-3-5-sonnet-latest", [add])
agent.invoke({"messages": [("user", "what's 3 + 5")]})
```
2025-01-15 09:43:37 -05:00
Eugene YurtsevandGitHub 536ee7b37a docs: document inject kwarg (#3026) 2025-01-14 21:41:27 -05:00
Nuno Campos 901273c0e2 Lint 2025-01-14 17:09:30 -08:00
Nuno Campos 7bdbd62611 Fix tracing hierarchy for imperative api 2025-01-14 17:03:45 -08:00
Nuno Campos 0b74e25f72 Remove send v2 2025-01-14 15:49:57 -08:00
Eugene YurtsevandGitHub ff843ab005 docs: internal doc nits (#2946)
Update internal documentation
2025-01-14 23:16:38 +00:00
Vadym BardaandGitHub f7fae7e140 langgraph: fix ismethod check in add_node (#3032)
Fixes #2893 #2965
2025-01-14 17:17:50 -05:00
Eugene YurtsevandGitHub 651ee8bd24 Update local-server.md (#3030) 2025-01-14 16:22:26 -05:00
Eugene YurtsevandGitHub 54bdba2da9 Update introduction.ipynb (#3029) 2025-01-14 16:20:54 -05:00
Eugene YurtsevandGitHub 7e5806cb0b Update local-server.md 2025-01-14 16:13:57 -05:00
Eugene YurtsevandGitHub 66f674fead Update introduction.ipynb 2025-01-14 16:12:20 -05:00
Vadym BardaandGitHub f029d615e6 ci: fix docs build (#3028) 2025-01-14 15:58:03 -05:00
Eugene Yurtsev bd76773b31 x 2025-01-14 15:50:20 -05:00
ccurmeandGitHub 9b6e6d67dc layout (#2972)
Some docs layout improvements to help guide user journey.

Currently we have `Home | Tutorials | How-tos | Concepts | Reference` in
top-level horizontal navigation bar.

Here we make these updates:
- Top-level horizontal navigation bar is just `Home | API Reference`
- Add vertical sidebar to `Home` with sections:
  - Introduction
  - Get started
  - Guides
  - Resources

`Get Started` contains quickstarts for LG and LG Platform / deployment.
These are tutorials in Diataxis terms.

`Guides` contains index pages for how-tos, concepts, tutorials.

Advantage of this organization is that users are directed naturally down
the sidebar from Intro -> Get started -> How-tos, which is roughly how
we expect them to proceed.

This also makes deployment info more accessible as it is highlighted in
the "Getting started" section.

![Screenshot 2025-01-14 at 1 37
01 PM](https://github.com/user-attachments/assets/76dcde25-874b-4def-ad71-5313e399b7d7)
2025-01-14 15:29:59 -05:00
ccurmeandGitHub ecfb3e3850 Merge branch 'main' into eugene/langgraph_nav 2025-01-14 15:21:26 -05:00
Chester Curme ec71cd6fc1 update 2025-01-14 15:09:46 -05:00
Vadym BardaandGitHub aab4f0b164 checkpoint-duckdb: release 2.0.2 (#3024) 2025-01-14 15:08:49 -05:00
Chester Curme 2db6d9d7b5 clean up 2025-01-14 15:08:48 -05:00
Vadym BardaandGitHub 5db71a32bf checkpoint-duckdb: handle calling .list on async checkpointer (#3022) 2025-01-14 20:00:58 +00:00
Chester Curme 0f5df797af fix link 2025-01-14 15:00:38 -05:00
Vadym BardaandGitHub 4c0f855329 ci: fix docs runner (#3010) 2025-01-14 14:58:34 -05:00
Chester Curme 5dc3f14e8b populate troubleshootings nav 2025-01-14 14:56:23 -05:00
Chester Curme f25ea9ecaf populate tutorials nav 2025-01-14 14:50:05 -05:00
Chester Curme 9940a9f833 populate how-tos nav 2025-01-14 14:47:42 -05:00
Chester Curme d175d5e4a8 populate concepts nav 2025-01-14 14:42:10 -05:00
Vadym BardaandGitHub 74adbb744b bump checkpoint sqlite, postgres (#3021) 2025-01-14 14:41:22 -05:00
Chester Curme fe63440d98 add deployment landing page 2025-01-14 14:40:45 -05:00
William Fu-Hinthorn 2f47d98b34 Update error message for missing dev command 2025-01-14 11:28:51 -08:00
Vadym BardaandGitHub b989502c24 checkpoint-sqlite/postgres: handle calling .list on async checkpointer (#3019) 2025-01-14 19:06:11 +00:00
Eugene YurtsevandGitHub 8507dc33f0 FIx docs: Update MULTIPLE_SUBGRAPHS.md (#3016) 2025-01-14 13:41:50 -05:00
bracesproul 0d50c62283 cr 2025-01-14 10:39:57 -08:00
vbarda a9073241b2 add css for navbar depth 2025-01-14 13:31:39 -05:00
Chester Curme 0a04262f05 add custom css 2025-01-14 12:46:00 -05:00
Chester Curme 381796c474 hack 2025-01-14 12:39:38 -05:00
Vadym BardaandGitHub a11ba2b38a docs: update replay in the concept docs (#3017) 2025-01-14 11:53:53 -05:00
Chester Curme 09ae5ce05d update 2025-01-14 11:26:49 -05:00
Chester Curme 59e7751a8c update 2025-01-14 10:48:50 -05:00
Cesar William AlvarengaandGitHub a61ea101f6 fix: add missing END constant import (#3011) 2025-01-13 19:40:40 -05:00
Chester Curme b9816e31ff update 2025-01-13 19:12:51 -05:00
Chester Curme 3ea7f9469a update 2025-01-13 18:26:24 -05:00
Chester Curme 24e61fafa9 update 2025-01-13 16:22:58 -05:00
bracesproul b52b32b38e format n lint 2025-01-13 13:14:36 -08:00
Brace SproulandGitHub 5aefa5dc8c Merge branch 'main' into brace/interrupt-schema 2025-01-13 13:08:37 -08:00
Andrew NguonlyandGitHub c86155d3d3 docs: Add note about LangGraph Platform UI not available for self-hosted deployments (#3009)
Example screenshot:

![image](https://github.com/user-attachments/assets/8304b08d-bc9b-4cd3-8ff4-ed2471d3d6c7)
2025-01-13 13:05:18 -08:00
Chester Curme 2b370cf3b7 template applications -> lg plat 2025-01-13 14:21:12 -05:00
Chester Curme 839bea0f33 fixup 2025-01-13 14:16:14 -05:00
William FHandGitHub a03f1f7469 Bullseye (#3008) 2025-01-13 10:01:36 -08:00
Jimmy SambuoandGitHub d7199e5874 docs: use InjectedStore in semantic search guide (#2995)
When I tried to follow the How-to guide for [How to add semantic search
to your agent's
memory](https://langchain-ai.github.io/langgraph/how-tos/memory/semantic-search/#using-in-create_react_agent)
using `create_react_agent`, I got this error message when my agent used
the tool:

```python
1 validation error for upsert_memory
store
  Field required [type=missing, input_value={'content': '@jimmy works...ny.', 'memory_id': None}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.10/v/missingTraceback (most recent call last):

  File "/usr/local/lib/python3.9/site-packages/langchain_core/tools/base.py", line 688, in run
    tool_args, tool_kwargs = self._to_args_and_kwargs(tool_input, tool_call_id)

  File "/usr/local/lib/python3.9/site-packages/langchain_core/tools/base.py", line 611, in _to_args_and_kwargs
    tool_input = self._parse_input(tool_input, tool_call_id)

  File "/usr/local/lib/python3.9/site-packages/langchain_core/tools/base.py", line 532, in _parse_input
    result = input_args.model_validate(tool_input)

  File "/usr/local/lib/python3.9/site-packages/pydantic/main.py", line 627, in model_validate
    return cls.__pydantic_validator__.validate_python(

pydantic_core._pydantic_core.ValidationError: 1 validation error for upsert_memory
store
  Field required [type=missing, input_value={'content': '@jimmy works...ny.', 'memory_id': None}, input_type=dict]
    For further information visit https://errors.pydantic.dev/2.10/v/missing
```

I believe it’s because the graph did not inject the store into the tool
if we use `InjectedToolArg`.

When looking at the guide for [How to pass runtime values to
tools](https://langchain-ai.github.io/langgraph/how-tos/pass-run-time-values-to-tools/),
it suggests to use `InjectedStore` with `create_react_agent`. After
changing my code to use `InjectedStore`, my agent was able to save to
the store.
2025-01-13 09:59:46 -05:00
Siddhesh dosiandGitHub 61f2151df7 Update customer-support.ipynb minor spell (#3002)
There was spelling mistake.
2025-01-13 09:52:19 -05:00
William FHandGitHub 713528ffc3 Add admonition regarding dockerfile usage (#3001) 2025-01-12 09:52:13 -08:00
Andrew NguonlyandGitHub 7bd79c2509 docs: Add docs for LANGCHAIN_ENDPOINT for self-hosted deployments (#2988)
@langchain-infra, is this correct? Is this needed or is it
redundant/unnecessary?
2025-01-10 15:24:38 -08:00
Andrew NguonlyandGitHub 9974787df6 docs: Add API docs for POST /v1/projects/{project_id}/revisions/{revision_id}/deploy endpoint (#2994) 2025-01-10 15:16:48 -08:00
William FHandGitHub 638712a73b Add support for custom fetch implementation (#2993) 2025-01-10 23:08:33 +00:00
Vadym BardaandGitHub b8a54f6294 langgraph: release 0.2.62 (#2990) 2025-01-10 14:33:54 -05:00
Brace SproulandGitHub f2913fbcb6 fix(sdk-js): Release 0.0.35 (#2989) 2025-01-10 10:52:32 -08:00
bracesproul cfb121ee8f cr 2025-01-10 10:45:45 -08:00
bracesproul d27beeed18 move to prebuilt 2025-01-10 10:45:22 -08:00
bracesproul 8045e89e09 fix(sdk-js): Release 0.0.35 2025-01-10 10:43:44 -08:00
Brace SproulandGitHub 8355a1720a fix: Cron response types (#2987)
technically a breaking change, however the old response type was
incorrect.
2025-01-10 10:15:03 -08:00
bracesproul c302724394 fix cron create for thread return type 2025-01-10 10:05:57 -08:00
bracesproul c624ff69e1 fix: Cron response types 2025-01-10 10:01:51 -08:00
Vadym BardaandGitHub 10d46acc60 langgraph: add structured output to create_react_agent (#2848)
```python
class WeatherResponse(BaseModel):
    """Respond to the user with this"""

    temperature: float = Field(description="The temperature in fahrenheit")
    wind_direction: str = Field(
        description="The direction of the wind in abbreviated form"
    )
    wind_speed: float = Field(description="The speed of the wind in mph")

@tool
def get_weather(city: Literal["nyc", "sf"]):
    """Use this to get weather information."""
    if city == "nyc":
        return "It is cloudy in NYC, with 5 mph winds in the North-East direction and a temperature of 70 degrees"
    elif city == "sf":
        return "It is 75 degrees and sunny in SF, with 3 mph winds in the South-East direction"
    else:
        raise AssertionError("Unknown city")

model = ChatOpenAI()
tools = [get_weather]
agent_with_structured_output = create_react_agent(model, tools, response_format=WeatherResponse)
agent_with_structured_output.invoke({"messages": [("user", "what's the weather in nyc?")]})
```

```pycon
{
    'messages': [...],
    'structured_response': WeatherResponse(temperature=70.0, wind_directon='NE', wind_speed=5.0)
}
```
2025-01-10 16:06:59 +00:00
Vadym BardaandGitHub 35c3ba0104 docs: update how to for passing config to tools (#2986) 2025-01-10 11:05:15 -05:00
Hongbin MaoandGitHub 0e2cd9e289 Fix typo (#2984) 2025-01-10 10:52:52 -05:00
William FHandGitHub f4bd02da72 Make admonition more admonitiony (#2982) 2025-01-10 01:46:42 +00:00
William FHandGitHub ecfbfa1b90 Update auth docstrings (#2977) 2025-01-09 16:58:19 -08:00
William FHandGitHub e5b5f9510b Fix empty migration (#2978) 2025-01-09 23:14:02 +00:00
Andrew NguonlyandGitHub c6d7c80a99 docs: Add documentation for LANGSMITH_RUNS_ENDPOINTS env var (#2976) 2025-01-09 13:24:41 -08:00
Eugene Yurtsev fba5ca7ab9 x 2025-01-09 12:24:30 -05:00
William FHandGitHub 909190cede Update SDK registration (#2974) 2025-01-09 09:20:54 -08:00
William FHandGitHub 43c8578eef Unify type-naming of search param (#2973) 2025-01-09 08:56:05 -08:00
William Fu-Hinthorn 56f5edb9ba Unify naming of search param 2025-01-09 08:46:17 -08:00
William FHandGitHub 41f0fd504e Add store auth types (#2971) 2025-01-09 08:32:54 -08:00
Eugene Yurtsev f141089811 x 2025-01-09 11:11:04 -05:00
Eugene Yurtsev 38487cb158 x 2025-01-09 11:11:04 -05:00
William FHandGitHub 6357d496af Merge branch 'main' into wfh/auth/store 2025-01-09 08:08:04 -08:00
William Fu-Hinthorn 52bd5b13a7 Add store auth types 2025-01-09 08:03:30 -08:00
Andrew NguonlyandGitHub b633e0a4ed docs: Add docs for POSTGRES_URI_CUSTOM environment variable (#2951) 2025-01-08 15:27:32 -08:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
c14bcb6e9f 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.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pallets/jinja/releases">jinja2's
releases</a>.</em></p>
<blockquote>
<h2>3.1.5</h2>
<p>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.</p>
<p>PyPI: <a
href="https://pypi.org/project/Jinja2/3.1.5/">https://pypi.org/project/Jinja2/3.1.5/</a>
Changes: <a
href="https://jinja.palletsprojects.com/changes/#version-3-1-5">https://jinja.palletsprojects.com/changes/#version-3-1-5</a>
Milestone: <a
href="https://github.com/pallets/jinja/milestone/16?closed=1">https://github.com/pallets/jinja/milestone/16?closed=1</a></p>
<ul>
<li>The sandboxed environment handles indirect calls to
<code>str.format</code>, such as by passing a stored reference to a
filter that calls its argument. <a
href="https://github.com/pallets/jinja/security/advisories/GHSA-q2x7-8rv6-6q7h">GHSA-q2x7-8rv6-6q7h</a></li>
<li>Escape template name before formatting it into error messages, to
avoid issues with names that contain f-string syntax. <a
href="https://redirect.github.com/pallets/jinja/issues/1792">#1792</a>,
<a
href="https://github.com/pallets/jinja/security/advisories/GHSA-gmj6-6f8f-6699">GHSA-gmj6-6f8f-6699</a></li>
<li>Sandbox does not allow <code>clear</code> and <code>pop</code> on
known mutable sequence types. <a
href="https://redirect.github.com/pallets/jinja/issues/2032">#2032</a></li>
<li>Calling sync <code>render</code> for an async template uses
<code>asyncio.run</code>. <a
href="https://redirect.github.com/pallets/jinja/issues/1952">#1952</a></li>
<li>Avoid unclosed <code>auto_aiter</code> warnings. <a
href="https://redirect.github.com/pallets/jinja/issues/1960">#1960</a></li>
<li>Return an <code>aclose</code>-able <code>AsyncGenerator</code> from
<code>Template.generate_async</code>. <a
href="https://redirect.github.com/pallets/jinja/issues/1960">#1960</a></li>
<li>Avoid leaving <code>root_render_func()</code> unclosed in
<code>Template.generate_async</code>. <a
href="https://redirect.github.com/pallets/jinja/issues/1960">#1960</a></li>
<li>Avoid leaving async generators unclosed in blocks, includes and
extends. <a
href="https://redirect.github.com/pallets/jinja/issues/1960">#1960</a></li>
<li>The runtime uses the correct <code>concat</code> function for the
current environment when calling block references. <a
href="https://redirect.github.com/pallets/jinja/issues/1701">#1701</a></li>
<li>Make <code>|unique</code> async-aware, allowing it to be used after
another async-aware filter. <a
href="https://redirect.github.com/pallets/jinja/issues/1781">#1781</a></li>
<li><code>|int</code> filter handles <code>OverflowError</code> from
scientific notation. <a
href="https://redirect.github.com/pallets/jinja/issues/1921">#1921</a></li>
<li>Make compiling deterministic for tuple unpacking in a <code>{% set
... %}</code> call. <a
href="https://redirect.github.com/pallets/jinja/issues/2021">#2021</a></li>
<li>Fix dunder protocol (<code>copy</code>/<code>pickle</code>/etc)
interaction with <code>Undefined</code> objects. <a
href="https://redirect.github.com/pallets/jinja/issues/2025">#2025</a></li>
<li>Fix <code>copy</code>/<code>pickle</code> support for the internal
<code>missing</code> object. <a
href="https://redirect.github.com/pallets/jinja/issues/2027">#2027</a></li>
<li><code>Environment.overlay(enable_async)</code> is applied correctly.
<a
href="https://redirect.github.com/pallets/jinja/issues/2061">#2061</a></li>
<li>The error message from <code>FileSystemLoader</code> includes the
paths that were searched. <a
href="https://redirect.github.com/pallets/jinja/issues/1661">#1661</a></li>
<li><code>PackageLoader</code> shows a clearer error message when the
package does not contain the templates directory. <a
href="https://redirect.github.com/pallets/jinja/issues/1705">#1705</a></li>
<li>Improve annotations for methods returning copies. <a
href="https://redirect.github.com/pallets/jinja/issues/1880">#1880</a></li>
<li><code>urlize</code> does not add <code>mailto:</code> to values like
<code>@a@b</code>. <a
href="https://redirect.github.com/pallets/jinja/issues/1870">#1870</a></li>
<li>Tests decorated with <code>@pass_context</code> can be used with the
<code>|select</code> filter. <a
href="https://redirect.github.com/pallets/jinja/issues/1624">#1624</a></li>
<li>Using <code>set</code> for multiple assignment (<code>a, b = 1,
2</code>) does not fail when the target is a namespace attribute. <a
href="https://redirect.github.com/pallets/jinja/issues/1413">#1413</a></li>
<li>Using <code>set</code> in all branches of <code>{% if %}{% elif %}{%
else %}</code> blocks does not cause the variable to be considered
initially undefined. <a
href="https://redirect.github.com/pallets/jinja/issues/1253">#1253</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pallets/jinja/blob/main/CHANGES.rst">jinja2's
changelog</a>.</em></p>
<blockquote>
<h2>Version 3.1.5</h2>
<p>Released 2024-12-21</p>
<ul>
<li>The sandboxed environment handles indirect calls to
<code>str.format</code>, such as
by passing a stored reference to a filter that calls its argument.
:ghsa:<code>q2x7-8rv6-6q7h</code></li>
<li>Escape template name before formatting it into error messages, to
avoid
issues with names that contain f-string syntax.
:issue:<code>1792</code>, :ghsa:<code>gmj6-6f8f-6699</code></li>
<li>Sandbox does not allow <code>clear</code> and <code>pop</code> on
known mutable sequence
types. :issue:<code>2032</code></li>
<li>Calling sync <code>render</code> for an async template uses
<code>asyncio.run</code>.
:pr:<code>1952</code></li>
<li>Avoid unclosed <code>auto_aiter</code> warnings.
:pr:<code>1960</code></li>
<li>Return an <code>aclose</code>-able <code>AsyncGenerator</code> from
<code>Template.generate_async</code>. :pr:<code>1960</code></li>
<li>Avoid leaving <code>root_render_func()</code> unclosed in
<code>Template.generate_async</code>. :pr:<code>1960</code></li>
<li>Avoid leaving async generators unclosed in blocks, includes and
extends.
:pr:<code>1960</code></li>
<li>The runtime uses the correct <code>concat</code> function for the
current environment
when calling block references. :issue:<code>1701</code></li>
<li>Make <code>|unique</code> async-aware, allowing it to be used after
another
async-aware filter. :issue:<code>1781</code></li>
<li><code>|int</code> filter handles <code>OverflowError</code> from
scientific notation.
:issue:<code>1921</code></li>
<li>Make compiling deterministic for tuple unpacking in a <code>{% set
... %}</code>
call. :issue:<code>2021</code></li>
<li>Fix dunder protocol (<code>copy</code>/<code>pickle</code>/etc)
interaction with <code>Undefined</code>
objects. :issue:<code>2025</code></li>
<li>Fix <code>copy</code>/<code>pickle</code> support for the internal
<code>missing</code> object.
:issue:<code>2027</code></li>
<li><code>Environment.overlay(enable_async)</code> is applied correctly.
:pr:<code>2061</code></li>
<li>The error message from <code>FileSystemLoader</code> includes the
paths that were
searched. :issue:<code>1661</code></li>
<li><code>PackageLoader</code> shows a clearer error message when the
package does not
contain the templates directory. :issue:<code>1705</code></li>
<li>Improve annotations for methods returning copies.
:pr:<code>1880</code></li>
<li><code>urlize</code> does not add <code>mailto:</code> to values like
<code>@a@b</code>. :pr:<code>1870</code></li>
<li>Tests decorated with <code>@pass_context`` can be used with the
``|select`` filter. :issue:</code>1624`</li>
<li>Using <code>set</code> for multiple assignment (<code>a, b = 1,
2</code>) does not fail when the
target is a namespace attribute. :issue:<code>1413</code></li>
<li>Using <code>set</code> in all branches of <code>{% if %}{% elif %}{%
else %}</code> blocks
does not cause the variable to be considered initially undefined.
:issue:<code>1253</code></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/pallets/jinja/commit/877f6e51be8e1765b06d911cfaa9033775f051d1"><code>877f6e5</code></a>
release version 3.1.5</li>
<li><a
href="https://github.com/pallets/jinja/commit/8d588592653b052f957b720e1fc93196e06f207f"><code>8d58859</code></a>
remove test pypi</li>
<li><a
href="https://github.com/pallets/jinja/commit/eda8fe86fd716dfce24910294e9f1fc81fbc740c"><code>eda8fe8</code></a>
update dev dependencies</li>
<li><a
href="https://github.com/pallets/jinja/commit/c8fdce1e0333f1122b244b03a48535fdd7b03d91"><code>c8fdce1</code></a>
Fix bug involving calling set on a template parameter within all
branches of ...</li>
<li><a
href="https://github.com/pallets/jinja/commit/66587ce989e5a478e0bb165371fa2b9d42b7040f"><code>66587ce</code></a>
Fix bug where set would sometimes fail within if</li>
<li><a
href="https://github.com/pallets/jinja/commit/fbc3a696c729d177340cc089531de7e2e5b6f065"><code>fbc3a69</code></a>
Add support for namespaces in tuple parsing (<a
href="https://redirect.github.com/pallets/jinja/issues/1664">#1664</a>)</li>
<li><a
href="https://github.com/pallets/jinja/commit/b8f4831d41e6a7cb5c40d42f074ffd92d2daccfc"><code>b8f4831</code></a>
more comments about nsref assignment</li>
<li><a
href="https://github.com/pallets/jinja/commit/ee832194cd9f55f75e5a51359b709d535efe957f"><code>ee83219</code></a>
Add support for namespaces in tuple assignment</li>
<li><a
href="https://github.com/pallets/jinja/commit/1d55cddbb28e433779511f28f13a2d8c4ec45826"><code>1d55cdd</code></a>
Triple quotes in docs (<a
href="https://redirect.github.com/pallets/jinja/issues/2064">#2064</a>)</li>
<li><a
href="https://github.com/pallets/jinja/commit/8a8eafc6b992ba177f1d3dd483f8465f18a11116"><code>8a8eafc</code></a>
edit block assignment section</li>
<li>Additional commits viewable in <a
href="https://github.com/pallets/jinja/compare/3.1.4...3.1.5">compare
view</a></li>
</ul>
</details>
<br />


[![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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

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 <dependency name> 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).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-08 17:31:13 -05:00
Vadym BardaandGitHub 8b29dc81e0 sdk-js: release 0.0.34 (#2959) 2025-01-08 10:59:40 -05:00
Vadym BardaandGitHub 1546eddfbe sdk-js: add stream mode and stream subgraphs to runs.create (#2958) 2025-01-08 10:58:07 -05:00
Vadym BardaandGitHub 9680e35beb docs: update tool in customer support tutorial (#2956)
Fixes #2952
2025-01-08 09:33:25 -05:00
Andrew NguonlyandGitHub 837f215857 docs: Rename Deploy Logs to Server Logs (#2922) 2025-01-07 17:13:06 -08:00
Vadym BardaandGitHub e13261ac0a ci: update langsmith and patch urllib3 vcr issues for notebook runner (#2949) 2025-01-07 20:09:57 -05:00
8ab206043c langgraph[patch]: fix create_react_agent inspectability (#2948)
Co-authored-by: vbarda <vadym@langchain.dev>
2025-01-07 18:47:31 +00:00
bracesproul 8534212a25 cr 2025-01-07 10:15:48 -08:00
bracesproul e39255a792 feat: Add interrupt schema to library 2025-01-07 10:00:38 -08:00
BagaturandGitHub 3dbe37041a 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
2025-01-07 11:00:14 -05:00
e00284b386 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 <abhishek.shirgaokar@zee.com>
Co-authored-by: vbarda <vadym@langchain.dev>
2025-01-07 10:04:50 -05:00
merdanandGitHub a36d2ac77d Update langgraph_agentic_rag.ipynb (#2885)
add missing package
2025-01-07 09:51:29 -05:00
tomo-abeandGitHub 2a46534286 Fix typo introduction.ipynb (#2894)
Fixing typo
2025-01-07 09:47:23 -05:00
VItto RivabellaandGitHub 4b06791b8c Update agent_supervisor.ipynb (#2888) 2025-01-07 09:45:41 -05:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
661e20eec4 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.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/pallets/jinja/releases">jinja2's
releases</a>.</em></p>
<blockquote>
<h2>3.1.5</h2>
<p>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.</p>
<p>PyPI: <a
href="https://pypi.org/project/Jinja2/3.1.5/">https://pypi.org/project/Jinja2/3.1.5/</a>
Changes: <a
href="https://jinja.palletsprojects.com/changes/#version-3-1-5">https://jinja.palletsprojects.com/changes/#version-3-1-5</a>
Milestone: <a
href="https://github.com/pallets/jinja/milestone/16?closed=1">https://github.com/pallets/jinja/milestone/16?closed=1</a></p>
<ul>
<li>The sandboxed environment handles indirect calls to
<code>str.format</code>, such as by passing a stored reference to a
filter that calls its argument. <a
href="https://github.com/pallets/jinja/security/advisories/GHSA-q2x7-8rv6-6q7h">GHSA-q2x7-8rv6-6q7h</a></li>
<li>Escape template name before formatting it into error messages, to
avoid issues with names that contain f-string syntax. <a
href="https://redirect.github.com/pallets/jinja/issues/1792">#1792</a>,
<a
href="https://github.com/pallets/jinja/security/advisories/GHSA-gmj6-6f8f-6699">GHSA-gmj6-6f8f-6699</a></li>
<li>Sandbox does not allow <code>clear</code> and <code>pop</code> on
known mutable sequence types. <a
href="https://redirect.github.com/pallets/jinja/issues/2032">#2032</a></li>
<li>Calling sync <code>render</code> for an async template uses
<code>asyncio.run</code>. <a
href="https://redirect.github.com/pallets/jinja/issues/1952">#1952</a></li>
<li>Avoid unclosed <code>auto_aiter</code> warnings. <a
href="https://redirect.github.com/pallets/jinja/issues/1960">#1960</a></li>
<li>Return an <code>aclose</code>-able <code>AsyncGenerator</code> from
<code>Template.generate_async</code>. <a
href="https://redirect.github.com/pallets/jinja/issues/1960">#1960</a></li>
<li>Avoid leaving <code>root_render_func()</code> unclosed in
<code>Template.generate_async</code>. <a
href="https://redirect.github.com/pallets/jinja/issues/1960">#1960</a></li>
<li>Avoid leaving async generators unclosed in blocks, includes and
extends. <a
href="https://redirect.github.com/pallets/jinja/issues/1960">#1960</a></li>
<li>The runtime uses the correct <code>concat</code> function for the
current environment when calling block references. <a
href="https://redirect.github.com/pallets/jinja/issues/1701">#1701</a></li>
<li>Make <code>|unique</code> async-aware, allowing it to be used after
another async-aware filter. <a
href="https://redirect.github.com/pallets/jinja/issues/1781">#1781</a></li>
<li><code>|int</code> filter handles <code>OverflowError</code> from
scientific notation. <a
href="https://redirect.github.com/pallets/jinja/issues/1921">#1921</a></li>
<li>Make compiling deterministic for tuple unpacking in a <code>{% set
... %}</code> call. <a
href="https://redirect.github.com/pallets/jinja/issues/2021">#2021</a></li>
<li>Fix dunder protocol (<code>copy</code>/<code>pickle</code>/etc)
interaction with <code>Undefined</code> objects. <a
href="https://redirect.github.com/pallets/jinja/issues/2025">#2025</a></li>
<li>Fix <code>copy</code>/<code>pickle</code> support for the internal
<code>missing</code> object. <a
href="https://redirect.github.com/pallets/jinja/issues/2027">#2027</a></li>
<li><code>Environment.overlay(enable_async)</code> is applied correctly.
<a
href="https://redirect.github.com/pallets/jinja/issues/2061">#2061</a></li>
<li>The error message from <code>FileSystemLoader</code> includes the
paths that were searched. <a
href="https://redirect.github.com/pallets/jinja/issues/1661">#1661</a></li>
<li><code>PackageLoader</code> shows a clearer error message when the
package does not contain the templates directory. <a
href="https://redirect.github.com/pallets/jinja/issues/1705">#1705</a></li>
<li>Improve annotations for methods returning copies. <a
href="https://redirect.github.com/pallets/jinja/issues/1880">#1880</a></li>
<li><code>urlize</code> does not add <code>mailto:</code> to values like
<code>@a@b</code>. <a
href="https://redirect.github.com/pallets/jinja/issues/1870">#1870</a></li>
<li>Tests decorated with <code>@pass_context</code> can be used with the
<code>|select</code> filter. <a
href="https://redirect.github.com/pallets/jinja/issues/1624">#1624</a></li>
<li>Using <code>set</code> for multiple assignment (<code>a, b = 1,
2</code>) does not fail when the target is a namespace attribute. <a
href="https://redirect.github.com/pallets/jinja/issues/1413">#1413</a></li>
<li>Using <code>set</code> in all branches of <code>{% if %}{% elif %}{%
else %}</code> blocks does not cause the variable to be considered
initially undefined. <a
href="https://redirect.github.com/pallets/jinja/issues/1253">#1253</a></li>
</ul>
</blockquote>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/pallets/jinja/blob/main/CHANGES.rst">jinja2's
changelog</a>.</em></p>
<blockquote>
<h2>Version 3.1.5</h2>
<p>Released 2024-12-21</p>
<ul>
<li>The sandboxed environment handles indirect calls to
<code>str.format</code>, such as
by passing a stored reference to a filter that calls its argument.
:ghsa:<code>q2x7-8rv6-6q7h</code></li>
<li>Escape template name before formatting it into error messages, to
avoid
issues with names that contain f-string syntax.
:issue:<code>1792</code>, :ghsa:<code>gmj6-6f8f-6699</code></li>
<li>Sandbox does not allow <code>clear</code> and <code>pop</code> on
known mutable sequence
types. :issue:<code>2032</code></li>
<li>Calling sync <code>render</code> for an async template uses
<code>asyncio.run</code>.
:pr:<code>1952</code></li>
<li>Avoid unclosed <code>auto_aiter</code> warnings.
:pr:<code>1960</code></li>
<li>Return an <code>aclose</code>-able <code>AsyncGenerator</code> from
<code>Template.generate_async</code>. :pr:<code>1960</code></li>
<li>Avoid leaving <code>root_render_func()</code> unclosed in
<code>Template.generate_async</code>. :pr:<code>1960</code></li>
<li>Avoid leaving async generators unclosed in blocks, includes and
extends.
:pr:<code>1960</code></li>
<li>The runtime uses the correct <code>concat</code> function for the
current environment
when calling block references. :issue:<code>1701</code></li>
<li>Make <code>|unique</code> async-aware, allowing it to be used after
another
async-aware filter. :issue:<code>1781</code></li>
<li><code>|int</code> filter handles <code>OverflowError</code> from
scientific notation.
:issue:<code>1921</code></li>
<li>Make compiling deterministic for tuple unpacking in a <code>{% set
... %}</code>
call. :issue:<code>2021</code></li>
<li>Fix dunder protocol (<code>copy</code>/<code>pickle</code>/etc)
interaction with <code>Undefined</code>
objects. :issue:<code>2025</code></li>
<li>Fix <code>copy</code>/<code>pickle</code> support for the internal
<code>missing</code> object.
:issue:<code>2027</code></li>
<li><code>Environment.overlay(enable_async)</code> is applied correctly.
:pr:<code>2061</code></li>
<li>The error message from <code>FileSystemLoader</code> includes the
paths that were
searched. :issue:<code>1661</code></li>
<li><code>PackageLoader</code> shows a clearer error message when the
package does not
contain the templates directory. :issue:<code>1705</code></li>
<li>Improve annotations for methods returning copies.
:pr:<code>1880</code></li>
<li><code>urlize</code> does not add <code>mailto:</code> to values like
<code>@a@b</code>. :pr:<code>1870</code></li>
<li>Tests decorated with <code>@pass_context`` can be used with the
``|select`` filter. :issue:</code>1624`</li>
<li>Using <code>set</code> for multiple assignment (<code>a, b = 1,
2</code>) does not fail when the
target is a namespace attribute. :issue:<code>1413</code></li>
<li>Using <code>set</code> in all branches of <code>{% if %}{% elif %}{%
else %}</code> blocks
does not cause the variable to be considered initially undefined.
:issue:<code>1253</code></li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="https://github.com/pallets/jinja/commit/877f6e51be8e1765b06d911cfaa9033775f051d1"><code>877f6e5</code></a>
release version 3.1.5</li>
<li><a
href="https://github.com/pallets/jinja/commit/8d588592653b052f957b720e1fc93196e06f207f"><code>8d58859</code></a>
remove test pypi</li>
<li><a
href="https://github.com/pallets/jinja/commit/eda8fe86fd716dfce24910294e9f1fc81fbc740c"><code>eda8fe8</code></a>
update dev dependencies</li>
<li><a
href="https://github.com/pallets/jinja/commit/c8fdce1e0333f1122b244b03a48535fdd7b03d91"><code>c8fdce1</code></a>
Fix bug involving calling set on a template parameter within all
branches of ...</li>
<li><a
href="https://github.com/pallets/jinja/commit/66587ce989e5a478e0bb165371fa2b9d42b7040f"><code>66587ce</code></a>
Fix bug where set would sometimes fail within if</li>
<li><a
href="https://github.com/pallets/jinja/commit/fbc3a696c729d177340cc089531de7e2e5b6f065"><code>fbc3a69</code></a>
Add support for namespaces in tuple parsing (<a
href="https://redirect.github.com/pallets/jinja/issues/1664">#1664</a>)</li>
<li><a
href="https://github.com/pallets/jinja/commit/b8f4831d41e6a7cb5c40d42f074ffd92d2daccfc"><code>b8f4831</code></a>
more comments about nsref assignment</li>
<li><a
href="https://github.com/pallets/jinja/commit/ee832194cd9f55f75e5a51359b709d535efe957f"><code>ee83219</code></a>
Add support for namespaces in tuple assignment</li>
<li><a
href="https://github.com/pallets/jinja/commit/1d55cddbb28e433779511f28f13a2d8c4ec45826"><code>1d55cdd</code></a>
Triple quotes in docs (<a
href="https://redirect.github.com/pallets/jinja/issues/2064">#2064</a>)</li>
<li><a
href="https://github.com/pallets/jinja/commit/8a8eafc6b992ba177f1d3dd483f8465f18a11116"><code>8a8eafc</code></a>
edit block assignment section</li>
<li>Additional commits viewable in <a
href="https://github.com/pallets/jinja/compare/3.1.4...3.1.5">compare
view</a></li>
</ul>
</details>
<br />


[![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)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

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 <dependency name> 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).

</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-07 09:41:37 -05:00
William FHandGitHub a486eb5e75 0.2.61 (#2933) 2025-01-05 14:43:43 -08:00
William Fu-Hinthorn e9d62944d3 0.2.61 2025-01-05 14:42:25 -08:00
William FHandGitHub cbd09abe58 fix formatting (#2880) 2025-01-04 04:59:04 -08:00
William FHandGitHub 4798443e31 Import TypedDict from typing_extensions, add ruff rule (#2910)
Within `libs/langgraph`, change all `TypedDict` imports to come from
`typing_extensions` rather than `typing`, as `pydantic` doesn't like the
latter.

Additionally, add a ruff rule to ban these imports too (so this doesn't
regress).

Solves  #2909.
2025-01-04 04:58:43 -08:00
William FHandGitHub ce900864fa Fix typo in client.py (#2925)
Typo change in function doc
2025-01-04 04:58:23 -08:00
Ramón VargasandGitHub 577f95bd50 Merge branch 'main' into patch-1 2025-01-04 13:26:54 +01:00
William FHandGitHub 59a11c63b0 Support multiple args in @task's (#2923)
Also add support for just `@task` without the ()'s
2025-01-04 04:25:49 -08:00
Andrew NguonlyandGitHub 08098688d4 docs: Update docs for POST /v1/projects/{project_id}/revisions endpoint (#2926) 2025-01-03 10:36:38 -08:00
Ramón VargasandGitHub 687ee02509 Update client.py
Typo change in function doc
2025-01-03 18:40:15 +01:00
William Fu-Hinthorn 451bc038b6 Support multiple args in @task's 2025-01-03 07:56:27 -08:00
Nuno CamposandGitHub c865e8c070 Update README.md 2025-01-02 10:01:35 +00:00
Nuno CamposandGitHub d74ec2c2de Bubble up stack close task (#2913) 2025-01-02 09:54:43 +00:00
Nuno CamposandGitHub f70bfc6d87 Fix stream_mode=updates for cases where one node returns multiple updates for same key (#2903) 2025-01-02 09:54:06 +00:00
David DuongandGitHub c86f0af107 fix(sdk): Fix SDK Command.update type (#2901)
Align typing with JS:


https://github.com/langchain-ai/langgraphjs/blob/main/libs/langgraph/src/constants.ts#L226
2025-01-01 15:55:58 +01:00
William Fu-Hinthorn c6ee807de5 Bubble up stack close task 2025-01-01 05:41:57 -08:00
Johannes Mario Meissner 7256752f48 Import TypedDict from typing_extensions, add ruff rule 2024-12-31 22:14:16 +09:00
Nuno Campos dac84951aa Fix stream_mode=updates for cases where one node returns multiple updates for same key 2024-12-30 20:10:59 +00:00
Nuno CamposandGitHub 3aaa3e38a0 Add more tests for async cancellation (#2902) 2024-12-30 20:10:14 +00:00
Nuno Campos 400d83708a Fix 2024-12-30 20:01:35 +00:00
Nuno Campos 1d9c7ef461 Fix 2024-12-30 19:29:14 +00:00
Nuno Campos 01e5ecedfd Remove assertion of order 2024-12-30 19:26:18 +00:00
Nuno Campos 76199701b0 Add more tests for async cancellation 2024-12-30 18:56:56 +00:00
jacoblee93 2766fccb5b Bump Python version 2024-12-30 10:30:50 -08:00
jacoblee93 6aef3e0117 Update Python types too 2024-12-30 10:29:01 -08:00
jacoblee93 c5023ba147 Modify type 2024-12-30 10:22:06 -08:00
jacoblee93 9a9fe2fdec Update JS SDK command types 2024-12-30 10:14:51 -08:00
Andrew NguonlyandGitHub effddca494 docs: LangGraph Control Plane API (#2881) 2024-12-26 16:15:18 -08:00
Harrison Chase 2ab59840e7 cr 2024-12-26 12:48:08 -08:00
Eugene YurtsevandGitHub 0fb65f6e67 docs: fix accidental nav bar change (#2865) 2024-12-23 21:47:14 -05:00
Eugene Yurtsev 0ecd23eec6 fix accidental commit 2024-12-23 21:38:16 -05:00
Eugene YurtsevandGitHub e137dabf22 docs: memoize class resolution (#2861)
Main purpose is to avoid all the repeated log warnings which make the
builds hare to understand
2024-12-23 14:24:16 -05:00
Eugene YurtsevandGitHub fdc1e47aa1 docs: add edit uri (#2860) 2024-12-23 14:20:17 -05:00
Eugene Yurtsev 866780b477 x 2024-12-23 14:11:38 -05:00
Eugene Yurtsev 18d3fa2e15 x 2024-12-23 14:06:25 -05:00
Eugene YurtsevandGitHub 4b0c53fb5c docs: improve api reference generation in code blocks (#2857)
Generate api references from any markdown -- this will handle markdown
files in notebooks as well as code blocks in plain markdown
2024-12-23 13:35:08 -05:00
Eugene Yurtsev 5183484322 x 2024-12-22 22:10:29 -05:00
Eugene Yurtsev 8213e4719b qx 2024-12-22 22:10:06 -05:00
Eugene Yurtsev f993dfcfcb x 2024-12-22 22:07:59 -05:00
Eugene YurtsevandGitHub 9e31b82d8d docs: Add highlight-next-line (#2850)
Add highlight next line


![image](https://github.com/user-attachments/assets/cda3c9f2-1f98-489a-a487-d1ad9c6a1186)


![image](https://github.com/user-attachments/assets/bfa05f4d-50cc-490a-9598-5076068d8f4b)
2024-12-20 21:10:51 -05:00
Eugene Yurtsev 1e0aebc3ec x 2024-12-20 17:38:20 -05:00
Eugene Yurtsev 056f581342 x 2024-12-20 17:29:10 -05:00
Eugene Yurtsev a0d7323bec x 2024-12-20 17:14:22 -05:00
221 changed files with 7133 additions and 7823 deletions
+1 -16
View File
@@ -17,21 +17,11 @@ jobs:
- "3.11"
- "3.12"
- "3.13"
core-version:
- "latest"
ff-send-v2:
- "false"
include:
- python-version: "3.11"
core-version: ">=0.2.42,<0.3.0"
- python-version: "3.11"
core-version: "latest"
ff-send-v2: "true"
defaults:
run:
working-directory: libs/langgraph
name: "test #${{ matrix.python-version }} (langchain-core: ${{ matrix.core-version }}, ff-send-v2: ${{ matrix.ff-send-v2 }})"
name: "test #${{ matrix.python-version }}"
steps:
- uses: actions/checkout@v4
- name: Set up Python ${{ matrix.python-version }} + Poetry ${{ env.POETRY_VERSION }}
@@ -51,14 +41,9 @@ jobs:
shell: bash
run: |
poetry install --with dev
if [ "${{ matrix.core-version }}" != "latest" ]; then
poetry run pip install "langchain-core${{ matrix.core-version }}"
fi
- name: Run tests
shell: bash
env:
LANGGRAPH_FF_SEND_V2: ${{ matrix.ff-send-v2 }}
run: |
make test_parallel
+36 -6
View File
@@ -31,7 +31,6 @@ jobs:
"libs/cli",
"libs/checkpoint",
"libs/checkpoint-sqlite",
"libs/checkpoint-duckdb",
"libs/checkpoint-postgres",
"libs/scheduler-kafka",
]
@@ -44,12 +43,12 @@ jobs:
name: cd ${{ matrix.working-directory }}
strategy:
matrix:
working-directory: [
working-directory:
[
"libs/cli",
"libs/checkpoint",
"libs/checkpoint-sqlite",
"libs/checkpoint-duckdb",
"libs/checkpoint-postgres"
"libs/checkpoint-postgres",
]
uses: ./.github/workflows/_test.yml
with:
@@ -76,7 +75,7 @@ jobs:
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
python-version: "3.11"
- name: Run check_sdk_methods script
run: python .github/scripts/check_sdk_methods.py
@@ -109,9 +108,40 @@ jobs:
- name: Build
run: yarn build
test-js:
runs-on: ubuntu-latest
strategy:
matrix:
working-directory:
- "libs/sdk-js"
defaults:
run:
working-directory: ${{ matrix.working-directory }}
steps:
- uses: actions/checkout@v3
- name: Setup Node.js (LTS)
uses: actions/setup-node@v3
with:
node-version: "20"
cache: "yarn"
cache-dependency-path: ${{ matrix.working-directory }}/yarn.lock
- name: Install dependencies
run: yarn install
- name: Run tests
run: yarn test
ci_success:
name: "CI Success"
needs: [lint, lint-js, test, test-langgraph, test-scheduler-kafka, integration-test]
needs:
[
lint,
lint-js,
test,
test-langgraph,
test-scheduler-kafka,
integration-test,
test-js,
]
if: |
always()
runs-on: ubuntu-latest
+2 -2
View File
@@ -85,7 +85,7 @@ jobs:
if [ "${{ github.event_name }}" == "schedule" ] || [ "${{ github.event_name }}" == "workflow_dispatch" ] || ([ "${{ github.event_name }}" == "push" ] && [ "${{ github.ref }}" == "refs/heads/main" ]); then
echo "Running link check on all HTML files matching notebooks in docs directory..."
poetry run pytest -v \
--check-links-ignore "https://(api|web|docs)\.smith\.langchain\.com/.*" \
--check-links-ignore "https://(api|web|docs|academy)\.smith\.langchain\.com/.*" \
--check-links-ignore "https://x.com/.*" \
--check-links-ignore "https://github\.com/.*" \
--check-links-ignore "http://localhost:8123/.*" \
@@ -106,7 +106,7 @@ jobs:
if [ -n "${CHANGED_FILES}" ]; then
echo "Running link check on HTML files matching changed notebook files..."
poetry run pytest -v \
--check-links-ignore "https://(api|web|docs)\.smith\.langchain\.com/.*" \
--check-links-ignore "https://(api|web|docs|academy)\.smith\.langchain\.com/.*" \
--check-links-ignore "http://localhost:8123/.*" \
--check-links-ignore "http://localhost:2024.*" \
--check-links-ignore "http://127.0.0.1:.*" \
+1 -1
View File
@@ -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
+93
View File
@@ -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
+83 -39
View File
@@ -6,6 +6,9 @@ import re
from typing import List, Literal, Optional
from typing_extensions import TypedDict
from functools import lru_cache
import nbformat
from nbconvert.preprocessors import Preprocessor
@@ -47,6 +50,8 @@ MANUAL_API_REFERENCES_LANGGRAPH = [
(["langgraph.graph"], "langgraph.constants", "END", "constants"),
(["langgraph.constants"], "langgraph.types", "Send", "types"),
(["langgraph.constants"], "langgraph.types", "Interrupt", "types"),
(["langgraph.constants"], "langgraph.types", "interrupt", "types"),
(["langgraph.constants"], "langgraph.types", "Command", "types"),
([], "langgraph.types", "RetryPolicy", "types"),
([], "langgraph.checkpoint.base", "Checkpoint", "checkpoints"),
([], "langgraph.checkpoint.base", "CheckpointMetadata", "checkpoints"),
@@ -83,8 +88,11 @@ _IMPORT_LANGCHAIN_RE = _make_regular_expression("langchain")
_IMPORT_LANGGRAPH_RE = _make_regular_expression("langgraph")
def _get_full_module_name(module_path, class_name) -> Optional[str]:
"""Get full module name using inspect"""
@lru_cache(maxsize=10_000)
def _get_full_module_name(module_path: str, class_name: str) -> Optional[str]:
"""Get full module name using inspect, with LRU cache to memoize results."""
try:
module = importlib.import_module(module_path)
class_ = getattr(module, class_name)
@@ -95,13 +103,12 @@ def _get_full_module_name(module_path, class_name) -> Optional[str]:
return module_path
return module.__name__
except AttributeError as e:
logger.warning(f"Could not find module for {class_name}, {e}")
logger.warning(f"API Reference: Could not find module for {class_name}, {e}")
return None
except ImportError as e:
logger.warning(f"Failed to load for class {class_name}, {e}")
logger.warning(f"API Reference: Failed to load for class {class_name}, {e}")
return None
def _get_doc_title(data: str, file_name: str) -> str:
try:
return re.findall(r"^#\s*(.*)", data, re.MULTILINE)[0]
@@ -115,10 +122,10 @@ def _get_doc_title(data: str, file_name: str) -> str:
class ImportInformation(TypedDict):
imported: str # imported class name
source: str # module path
docs: str # URL to the documentation
title: str # Title of the document
imported: str # The name of the class that was imported.
source: str # The full module path from which the class was imported.
docs: str # The URL pointing to the class's documentation.
title: str # The title of the document where the import is used.
def _get_imports(
@@ -211,36 +218,73 @@ def _get_imports(
return imports
class ImportPreprocessor(Preprocessor):
"""A preprocessor to replace imports in each Python code cell with links to their
documentation and append the import info in a comment."""
def get_imports(code: str, doc_title: str) -> List[ImportInformation]:
"""Retrieve all import references from the given code for specified ecosystems.
def preprocess(self, nb, resources):
self.all_imports = []
file_name = os.path.basename(resources.get("metadata", {}).get("name", ""))
_DOC_TITLE = _get_doc_title(nb.cells[0].source, file_name)
Args:
code: The source code from which to extract import references.
doc_title: The documentation title associated with the code.
cells = []
for cell in nb.cells:
if cell.cell_type == "code":
cells.append(cell)
imports = _get_imports(
cell.source, _DOC_TITLE, "langchain"
) + _get_imports(cell.source, _DOC_TITLE, "langgraph")
if not imports:
continue
Returns:
A list of import information for each import found.
"""
ecosystems = ["langchain", "langgraph"]
all_imports = []
for package_ecosystem in ecosystems:
all_imports.extend(_get_imports(code, doc_title, package_ecosystem))
return all_imports
cells.append(
nbformat.v4.new_markdown_cell(
source=f"""
<div>
<b>API Reference:</b>
{' | '.join(f'<a href="{imp["docs"]}">{imp["imported"]}</a>' for imp in imports)}
</div>
"""
)
)
else:
cells.append(cell)
nb.cells = cells
return nb, resources
def update_markdown_with_imports(markdown: str) -> str:
"""Update markdown to include API reference links for imports in Python code blocks.
This function scans the markdown content for Python code blocks, extracts any imports, and appends links to their API documentation.
Args:
markdown: The markdown content to process.
Returns:
Updated markdown with API reference links appended to Python code blocks.
Example:
Given a markdown with a Python code block:
```python
from langchain.nlp import TextGenerator
```
This function will append an API reference link to the `TextGenerator` class from the `langchain.nlp` module if it's recognized.
"""
code_block_pattern = re.compile(
r'(?P<indent>[ \t]*)```(?P<language>python|py)\n(?P<code>.*?)\n(?P=indent)```', re.DOTALL
)
def replace_code_block(match: re.Match) -> str:
"""Replace the matched code block with additional API reference links if imports are found.
Args:
match (re.Match): The regex match object containing the code block.
Returns:
str: The modified code block with API reference links appended if applicable.
"""
indent = match.group('indent')
code_block = match.group('code')
language = match.group('language') # Preserve the language from the regex match
# Retrieve import information from the code block
imports = get_imports(code_block, "__unused__")
original_code_block = match.group(0)
# If no imports are found, return the original code block
if not imports:
return original_code_block
# Generate API reference links for each import
api_links = ' | '.join(
f'<a href="{imp["docs"]}">{imp["imported"]}</a>' for imp in imports
)
# Return the code block with appended API reference links
return f'{original_code_block}\n\n{indent}API Reference: {api_links}'
# Apply the replace_code_block function to all matches in the markdown
updated_markdown = code_block_pattern.sub(replace_code_block, markdown)
return updated_markdown
-3
View File
@@ -6,8 +6,6 @@ import nbformat
from nbconvert.exporters import MarkdownExporter
from nbconvert.preprocessors import Preprocessor
from generate_api_reference_links import ImportPreprocessor
class EscapePreprocessor(Preprocessor):
def preprocess_cell(self, cell, resources, cell_index):
@@ -107,7 +105,6 @@ exporter = MarkdownExporter(
preprocessors=[
EscapePreprocessor,
ExtractAttachmentsPreprocessor,
ImportPreprocessor,
],
template_name="mdoutput",
extra_template_basedirs=[
+77 -3
View File
@@ -1,10 +1,13 @@
import logging
import os
import re
from typing import Any, Dict
from mkdocs.structure.pages import Page
from mkdocs.structure.files import Files, File
from mkdocs.structure.pages import Page
from notebook_convert import convert_notebook
from generate_api_reference_links import update_markdown_with_imports
logger = logging.getLogger(__name__)
logging.basicConfig()
@@ -35,12 +38,83 @@ def on_files(files: Files, **kwargs: Dict[str, Any]):
return new_files
def _highlight_code_blocks(markdown: str) -> str:
"""Find code blocks with highlight comments and add hl_lines attribute.
Args:
markdown: The markdown content to process.
Returns:
updated Markdown code with code blocks containing highlight comments
updated to use the hl_lines attribute.
"""
# Pattern to find code blocks with highlight comments and without
# existing hl_lines for Python and JavaScript
# Pattern to find code blocks with highlight comments, handling optional indentation
code_block_pattern = re.compile(
r"(?P<indent>[ \t]*)```(?P<language>py|python|js|javascript)(?!\s+hl_lines=)\n"
r"(?P<code>((?:.*\n)*?))" # Capture the code inside the block using named group
r"(?P=indent)```" # Match closing backticks with the same indentation
)
def replace_highlight_comments(match: re.Match) -> str:
indent = match.group("indent")
language = match.group("language")
code_block = match.group("code")
lines = code_block.split("\n")
highlighted_lines = []
# Skip initial empty lines
while lines and not lines[0].strip():
lines.pop(0)
lines_to_keep = []
comment_syntax = (
"# highlight-next-line"
if language in ["py", "python"]
else "// highlight-next-line"
)
for line in lines:
if comment_syntax in line:
count = len(lines_to_keep) + 1
highlighted_lines.append(str(count))
else:
lines_to_keep.append(line)
# Reconstruct the new code block
new_code_block = "\n".join(lines_to_keep)
if highlighted_lines:
return (
f'{indent}```{language} hl_lines="{" ".join(highlighted_lines)}"\n'
# The indent and terminating \n is already included in the code block
f'{new_code_block}'
f'{indent}```'
)
else:
return (
f"{indent}```{language}\n"
# The indent and terminating \n is already included in the code block
f"{new_code_block}"
f"{indent}```"
)
# Replace all code blocks in the markdown
markdown = code_block_pattern.sub(replace_highlight_comments, markdown)
return markdown
def on_page_markdown(markdown: str, page: Page, **kwargs: Dict[str, Any]):
if DISABLED:
return markdown
if page.file.src_path.endswith(".ipynb"):
logger.info("Processing Jupyter notebook: %s", page.file.src_path)
body = convert_notebook(page.file.abs_src_path)
return body
markdown = convert_notebook(page.file.abs_src_path)
# Append API reference links to code blocks
markdown = update_markdown_with_imports(markdown)
# Apply highlight comments to code blocks
markdown = _highlight_code_blocks(markdown)
return markdown
+25 -4
View File
@@ -42,8 +42,13 @@ NOTEBOOKS_NO_EXECUTION = [
"docs/docs/tutorials/storm/storm.ipynb", # issues only when running with VCR
"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/tutorials/rag/langgraph_adaptive_rag.ipynb", # flakiness only when running in GHA
"docs/docs/tutorials/rag/langgraph_self_rag.ipynb", # flakiness only when running in GHA
"docs/docs/tutorials/rag/langgraph_agentic_rag.ipynb", # flakiness only when running in GHA
"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",
"docs/docs/tutorials/llm-compiler/LLMCompiler.ipynb"
]
@@ -86,6 +91,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,8 +126,22 @@ 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 = [
vcr_import_lines = []
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()",
])
vcr_import_lines.extend([
"import nest_asyncio",
"nest_asyncio.apply()",
"import vcr",
@@ -151,7 +171,8 @@ def add_vcr_to_notebook(
"",
"custom_vcr.register_serializer('advanced_compressed', AdvancedCompressedSerializer())",
"custom_vcr.serializer = 'advanced_compressed'",
]
])
import_cell = nbformat.v4.new_code_cell(source="\n".join(vcr_import_lines))
import_cell.pop("id", None)
notebook.cells.insert(0, import_cell)
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
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
@@ -1 +0,0 @@
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
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
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
@@ -1 +0,0 @@
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
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
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
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
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
@@ -0,0 +1 @@
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
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
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
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1 +1 @@
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
@@ -1 +1 @@
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
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
eNrtVg1sE9cdD0sKhLU0asegK2g3dwRWcokdOzgOY8JxnIaPfDRxVZIA3svds33x+e64e05jg1UBabMsG+3BUEVBlILjtF5KElJgqGQhqrI2SVeh0qoLqIEw1qwr5aNfUjWx7N3ZzjeEdVSatFiy9O69/8fv/b/eb3tjFRQlhudmNDEcgiKgEP6Qdm1vFOFmL5RQTcgDkYung0WFJbbDXpHpW+xCSJCy0tKAwKQCDrlEXmCoVIr3pFXp0jxQkoATSsEKnvad+15wi8YDqu2Id0NO0mQROm26IYXQxKTwTvkWjcizEK80XgmKGnxK8RgKh5Stp1wAEUCEhMdHOEAVLzIIEgJEkiawUbHD05BV5CgWeGlI6skM0gUYt5dkAcLoFWuI59moIw54Io4EGh/bYwbtqkEsSkOJEhlBCYEiZqZpArkgwTISInjHWACpigLDCV5klygX9ACssUUj4GBAETHq1fCnYlhZjLO8bjKLBOIJCaKIYQQ9EU3kE1TMEhIZzqkJKDeKbgFRBD5NQNlSssWIkFbuGfG6cZQgX1EJKaRKjgQBRw7eQRByVLH/Lg6BqbAolqdEogZtbMQYBwEkN8Rp4r81jo2BRhcENG6D/rikoIuXkNw6obSbAUVBAZGQo3ga50F+zelnhBSChg6l0sK4ZDmo9o4cdkMokIBlqmAooiW3AEFgGQoo52mVEs81RUucVNBMPA4rnUDiBuGQfMIcw5FW5MOdyBHaVEN6qralmpQQYDgWtxKudgwpJKjnb4w+EADlxnbIaJfLoYjykdEyvCQ35AOqsGSMSSBSLrkBiJ7lhrbR+6KXQ4wHyo2Woonuoocj7vSpOl2qqXWMYcnHUXKDA7ASbB0O8rBKOF2brie1y0mt7sQY0xCJPpLisQf5Ze2RWABZyDmRSz683Lj8FRFKAh5ecEcIqyGvtD2IkwXfebsxOm4OFa4dSfX8YA5OnNyeKzIpeCwRawBHYNcZhC4jy2DI0pmIx/JtTZaoG9ukeWq1iYCTHDhX1lhdNFIuL4crMmyZtCL6NCM3FrF/lvEwiIzOWpxH5VMOGrRabV/ybSVFXOEMp3gM6k0m0xR2cWQgkl9X7ofjSuq0tugtjWWT+1EbiYyM7SiqkIIK43p0SvkRbDGd5DvQuQVCU1nfksm0eS+aALEhU/W2bGr5EYhRnSV3onNriMRk6uPCF3H009tIjg5cRJq4rfQt8YSjmScZWj6F13atzlLm8JvLypDf6qdAZZ6xWLQV+6sOVzFADutSdYST550sbLbkkhaA5ydZoraQ3JhTWmDOX21pWk8W8xU8riUbwDXH8RwMlUARd60cpljeS+M5KMIQVi82l8qvZzocNGUyUQbaAYzpRpq0PlncEmum4WYJKkNUZQrbQpH3rWtG7o/rZ8epv3j8Hxqin+8ueFOb9Ky968Xvz5/V8MkD3cZH/avyftXwt7hseXOobt6Hc28syMjxPXX54Jyiwrat+qGU+L8/kLBw6xPBthUXzlg6OvecW/nkN18fP9ccfmuRcPCPXeuf6e+ds80yuG5d3rVjS5jEzIUb6mYmLH3EUtf989LkY+/n5x01lL/zXkr83J7S7LXEptrdyQO6qsLc039+RteUe/Zo/z2hSlv+l1nHX3jpyNmaJuvnV9qdne5yXVh+6LNXM29UXPrnL+cxzjRwuWP3fr31+uabn3y8oLb6qz3vDnKLDrz/9ad/OdW059TVa8bTnT2WKys+fG7O8fsSKha8ZZx7YEM5WtreNjS47vRfH1v1+6Sa+/4kzD57f9f1w48/7z7jT6r3vWte/QT1ctbvNt+89LTVf2lRz+f7T656Wt+7dWHHDCVY8XFFbUd39eP1XSJwCYbvjsApBCCmCSQJv+4YzFh1bBvBatXQ6iUsS7ggKxA+3kvgCqXcykocxwgqfIRXwoU0TFjG0grC4eXUoazShRgXUH2oeIZ3MGm04+soUrcnKeoUi5ELho4pe3HLFZgZo57P9pZQNn+1uyybAjm+IitmrmOuPjFo5eNw4Eb3suMio8HPkIT5B++UYiRXwWu/IwQKUskORZEXsbT6EmNQ04R6mlBPE+ppQq0S6qBOe5cZdbr2/4JRm/7XGXW6dppR3xVGvcadA9xrrABw5kpYZE7PKcn2Zni+W0YNjBU0VfGfMerEEUZNP/f42njzvTVDPbsGV5488MPeX/Rss7b+wG7d2bLvuLO5+2T3rxu+7Oidd09XY+IX+TM/Tghsj5v1UdVXV2542k3vHQqUHetdfOT84AeBZfdf7Nz5SP7PirvIbbUpb9IHK5ufZS8OEHUzZyfNSqkLf1q56bOWCy+EX923r/Qjw8WfzHm41Vxtuol+FCi4MD9RqF3TnbjivNwbhNprO4uPnr9Ye7n/7d/S/9Durs9ctH/Drtc2dX7zwY4Xf7Mx2QZmr9qftWzvwMNL2+dfykv6w707asWHHiw488X6Jn3fg8tqfO3Xk3RXX6nfe8Y/cJU/9K+BvdqbzuIrJ/RvrHypIy5CihfXN+9xYlL8b/H+B4Y=
@@ -1 +1 @@
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
@@ -1 +0,0 @@
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
@@ -1 +0,0 @@
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
@@ -1 +1 @@
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
@@ -1 +1 @@
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
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
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
@@ -0,0 +1 @@
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
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
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
@@ -0,0 +1 @@
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
@@ -1 +0,0 @@
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
@@ -0,0 +1 @@
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
@@ -1 +0,0 @@
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
@@ -0,0 +1 @@
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
@@ -1 +0,0 @@
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
@@ -0,0 +1 @@
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
@@ -1 +0,0 @@
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
@@ -0,0 +1 @@
eNrtVnt0E1Uah7J6QFeovAVppxF5dtKZJM2jGCi0lFIoLX1Aa8HszeQmmWZenUfaNKerUFxQUZwq6wHsyqM0UMpLkAUR9Cg+u+z6hoICCyKLqCxyytGj1r0zSSAVXf/hj/Wsc05yZu733d/33e91f4sjQShKNM/1bqc5GYqAktGH1LQ4IsIaBUryklYWyn7e01JcVFq2QRHpzgl+WRakrIwMINBGXoAcoI0Uz2YEyQzKD+QM9C4wUIdpcfOe0LE+1rCBhZIEfFAyZGFVYQPFI1ucjD4MOQyQJNobwmQ/xGgObaY5H4ZMiyEMSBik0bqIATevyFgtBPoXL2IcLxsN6ZhB5BmowUghSYasoSEd64FeixwaK+nY8c00h0nexK2KBEVDw0K0wvIeyGhLPkHGLbyuBCUBHQS6vLzIAg0zbJBDgr6xWuI5l0T5IQs01cRPTY0DrK5WglxHFpCGB0qUSAtaaDSBh6bkceMxfDLGwVoMsoIcwrQ1JAZiaAGny1kgCCgiV9WuKaCT0DINGLoeejCvyLMYwGLaGO+uhhQ6+QIOQ8+4AAylY0HAKHA8JgBalGLgtJZxNwN/CR0lgvZiQRpkRQE9mBMLN0TfUWCwAELXAhvHi6npqlWBhUg7GLM4YUKgFog+6Zcs1qK862nToujUXY97rqEiW5oQnauWF5F/ok9hUcoxhpZkI4blIZ9gHdDqMAvTTYzjOegk0zG5lneaxmvJkGQRraM8eAEjQW3hWuriGY6GUdMWRFTpokzrFRxGtYNyqr9BTmG1ojbE6ktT5vUXraLiQJoxzmdoaNBLqkahRejRd0WBFjboEqQFARt3qSHih8CDuvNEr9tb/Lwkq9t6dtx2QFEQVSpEXeNB8OpWXz0tpGMe6GWADNtQH3BQj67aFoBQwFFsg7A1ukvdgUqFoSmgyTO02m2P9Q2uOX29uE3rExz1MCeru4uQE1NnZhSH0GjgMNKY6TDadtThkgxojkGtjjMA+dMq6PL9iQIBUAEEgsfGjtoa3bwtUYeX1I2FgCoq7QEJRMqvbgQia7XsSlwXFU6mWahGcoqvNxcTXjNnNpKk0bGzB7AU4ih1ox70fYkCP2RQ0vHoAFT3u6EMjNqIMyaMOKMARAn+tYdNKIshnOKRaXUd0UrxfICGaudXLhfldblZZ6mF4OvyhXmg3srPL3LzFTNCMwW3UMfbiVlTi5VixewqygvK+Up9JU7azFa7ncy0OXDSSBhJI4m7grb8Spu/hGU5say+XCTqq/0cO4ecV0TOkkuClf5783MhkCyZpa7KyvrKwkxrTW0pNXtaznzvvGqza95MaHcwcHaueK9cnju3NKeQU6zW2kkY8k4J0h4nWTzdJlWUz88lpGmemlJoLiCDcyUfGfTkG4PAXA58oUr0wShGe4J7RCaJEzEPrYTFTmjPtnhJMZDzyX51g91k2hQfqY2tKGSyIi1uQeUL//ZGJHZHrC+ada3yh7bkolJWD5QpqEVJC1YAOMxEmDIx0pFFWLNMFmxGYVl7TsxM2U9W7s4yEXCSF2VyerxTIpRf4QLQ05bzkz1yQOsRlEnNfXRN4LBO4CWIx7xS2yvwkujtiM/M3RVtSJwXfYCj63Wz6mat/lGp0NzumBgNEA0SGcdZSd1gshLbYpJ4abahcxE4SeAE+XwdLqJjMzRLo9jp/7HrGHUGqUV27/UaMh+AnKRuMhPR52CiiohGG5qvyPpVoBYHel74aaU4lknTcVh7OoQSCBMc2mBlpb3Xy2MQ6wmpvS6ujNMetXM0+nCZ3W6b3WJyEx4TZbcQHgKYPHbCZgYW0gGB1bsvOp5xWUudwIsyLkEKsQ85pHams6BOG0ROM5lptqKTTtKIA6N4YKnizuW1M0iTMEGEDA8823Py8ByARjteqlebGsmtnDO1cGbOngo8sWzwIv1eRnKOlzja620thSJKjdpGMbziQRNVhK0Iq2RqpbrbQZBeaDMBk93tILx2Ap8+v2RHHO1qkbVo4zgCGOR7kFJ3+c1OQ5bFYjZMQte00261EITOjxa1Rm+HV3s/k/pI31760wf9fvhheUkHd5xIfuHCxGXOqgcHT6m+8OcBfZvuTNq77NZFY+YPHPTw6DfKV7/07xeHPTl4Vl7J2mEpwaDXtzRcMLzP3ev+gI2Ys17JOqB0TX7xHyfv/2D/69WpwaLDgw6803Dfx1+c7ZNueCXFVfz22AtLd2x9L/+t1b2HpjhA2eH7jbbj7METxvDa5wYqLR889u7KQv7ZNeWr2fcY88CRW35387ij0svDqUj3o0MfPVQ7rmLP1+27hydtv/3hWYOoU1sfG3IqbVP2R8npY4orcvz1RyJ96o7fnrLW/lLqJ++vnfJS6MQXOz9LWuEtjHRVTHG9FqiaxK8AhzK6Cu4YsvrduwZ8eGjuovbGFOfY5d9/eeTzbU83Xt6jlDU1TB900+Wu6rcbxx/t9/Hy4ZWn6/OOLe9c0LFy4EMTR3kdi06tn+qYGykOjV3Z3PtN5vx278H3UobOb+1O/aZfctKodenNMzYf6nq5dM3rdcEfqvcv+Wjknx7oLuyXPnPditS0naebU4xJL8/AmI6CVSMOXK62P/LWyguzhX0LfHsXf/L0dzdpWejTK++5zOxUlJIbSYp7e/8LKf5foK0+KLsSOM2PuOsMKPdwT2OBAJMESNFemsIo1Ki/RLJ+RKn0LYl+/ixn0jUT2VWMpv1Gon4jUf8PJMqcab+xJMr+6yRRLRYiM/PXw6Js1hvOogizyW0lLW6zyWS3maHVbPfYKTcFACIodtJs+VWwKMrttlM3kEW1/JhFNRUFPiKSX73YPdj99wunmCsrzlTV9z0weFrS3burlptGhD94o+nx1+4GnRfv8/Af9i9MG5b6qe3iN4f9/Vclrx1SliRk3DGJ/2rkycnGF61rLjYfCoRrvz17/PtZ7zhPPnX83e4HppfsjZxc8l3r89lHQjntzaPIm5tmv9klhp8b39Gh7BuRfW7wqtEB57mJT2U8cnZCxlsvHH16STiiGspO+8YsSV76zzWGe6dnFD/kvjTv/Li8zoFl58akYfYnJmDU++pGWDE7uRk+m/PZK/2LL1/o3zbqnvyJXOPuTXc9P+rOc03ZhamwgAlTc7rOOBprtg74cvxfvt53wr/lzMH+ozfsOn+/2rx0UYo57Y+37bpy8XTjgG2XF+wKj1nz+yMd7/RvPTtHCLs/r1i96tP6S4sqty7baK3ZMyH7oXDJE+KxLZ+vDJofP5zXbeuYceLM0WN7ntn5TC9DaEz5t9kFZ74NRfZkn/+q+0jwvkvJww0PThmx2VuY5mxcn3fFe88ty7arm7eMZKtumfyvS6YRru23PvlZ9cK3b3mWujIsSqXSbuNqDCgv/wGgT+wJ
@@ -1 +0,0 @@
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
@@ -0,0 +1 @@
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
@@ -1 +0,0 @@
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
@@ -0,0 +1 @@
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
File diff suppressed because one or more lines are too long
@@ -1 +0,0 @@
eNrtVgt0FNUZDuIRSm1EOVg0jY6pYBIyuzO7m30kBEiWkLcJu0sgCSFndubu7rCzM5N57GYTUgwRsRKlI2ArikrYbDAHkhgxtSjVKlBUaBHwQRBEEcGitvhABJTemd1AIrQee+w5fTjnJHvn/v/9/n/u//33fos7g0AQaY4dsYFmJSAQpARfxPsXdwqgXgaidGc0ACQfR0Uqyp2udbJA70/3SRIvZun1BE/rOB6wBK0juYA+iOtJHyHp4ZhngAYTcXNUeGDk2qaUABBFwgvElCykpimF5GAsVoIvKXaGEEXaE0YkH0BoFi6mWS8CQwthhBARQMN5ASHcnCwhIUBob5yAsJykS8lAUgSOASqMGBYlEEhpzkCGoYdgQreJGvbgYppFRM/QpbIIhJTmWjgT4CjAqFNeXkKNukxUkgU3p/qycBaHvzwhEAwDmDqJ45g6Eo7VL/IQjAigVZQEQASGTMCUeLinEEaNhOks6py20sfRpDrXlCKFeS0Nj8xqe6+GuzBWHVgioDk44BaomTbHQeJ7+V3XQzMFRFKg+bhHCkWTUmoagk5FWBBCYMpSGFHnoJkQwvNYzR4geB5W5oLbRQe4o7REEwzdCCjEI3ABhEDi3gjnXgBIWIF5LAKfVD8IZyBBgpFBGsITtCDGwWmVeW4GfBs6JATtQYI0kRUDpJAcpKk5NvZAVvghulrgQby4m+Za46+F3sF4xPR0f4gQvOK3RQxB/mn0UXcxR0t9MHMVFcZSjfC7QpwA8xO8cgBSD2FoUdIhyEyYE2gg1H7IQrQQqRwLciCTpBCXY0hLiVMKthjswmF0iO2c5iDAJhMkGsQcBLWM2giwskq2mpQ4tVVnThuoZB4EgqSElYjRRu1pWgCUtioGVNvc3Fzb3OkDBAVTOJQwNuLjREnpHt7cPQRJAtgUADYoBeGUjd5Gms9AKOBhCAl0wZZjgbaBSpcfAB6F2xcE0dgqpReygaFJQrXrF4gcuyHeoqia5KXmLrUlUXhcsJKyqRwmkVukrwjDU4hFcJ3JqsN6G1BRImiWgacKyhAwnyiv2Z8ZauAJ0g9B0PgJp0Rji7uH+nCi0lFGkOXOYZCEQPqUDkIImE1PDp0XZFaiA0DptFdcGi5uvBjOqMNxne2JYcBimCWVDu18+O2wxUASwijJQQxlLRYlOc5PA2X/J3V1pKfOHcgpxGWDlZzjDXPGareTMFrkfLMvaM8r5iWiXiw21OXXLfBWu+YWukIobjFYjJkWG2ZBcR2mw3U4yhYbZ7olmXPlhgryDTiRz1XpSkAZVhjg5gDnnIpGS667XDLPzM/N4+1eqqGspK4EmOdQuf6GUoYupaxsnpkDRvF2Z6Vphi4YMgGb1T4rG4HZyUGayvHWcUJlhb2ed9Y30sW5hbJb4hmGnhUKsg1hwuKwhStMRWKgpMo0a0h6ZpMJxeIZmjGTFVOf7kFuMID1Sj5lnc1gWy8AkYf3CWiNwi2TZHFxBPIQ7NzRGb9X2stLLlJ4fGQG5KSyxeWTMxCDGXECHjFgBhOCG7OM1iyjBSkoc22wx8O4LkvBJ1wCwYoeSMP8Qcp3kj6Z9QOqy35Zsm9RyQ4rqaYPrxYUNPCcCNB4VsqGuagjdqOiRTOejHUWyglegqUbtbDK4yqR4Q1Ks5viZtj5KiQMjgZEZR1uNnfHLYMc64LfhaE4hmL479RGJ2FLqYnznCChIiDhfS2Flf0ZAaJB7accI55pNMNNzlavWkamgFN2z+ACMKaYjfACYDiC2tyAwisLMHSAhkXQ/se1AOwVXC3R05d6SJwfsKKyPhOLPb8f6iIANYL6GReAIjb4PHt5p0Esk+pjM2Obh7uJYEhC68wB8elL7XGIdkzc0DDojNKUsv9W+FLnptw2o5GkbHim2wJ/AGU0ANJNERRhAEabocc+E7UTpA+gTo1tSueMqttzy4rs/XPRobRBy7U7FNpZTmRpjyfqBAIsjdJFMpxMwaNRAFGI5citUjZZSZuRsJBmzIoZTSbMiubPcfQOol0gWUQ9VzXZ1BKNndzbRvTdvGx0gvaMhH/nz0uOWv8RbOzCL3rGnn14pXXLvq0cbUusthamdXSkzVTeuM9R5eiQn8v7uklZM8D6Pke23ufxmgZqt07Y8TPHVe4Xi1yV9/702CdHTu16Zs6seRM3oafFcP3Nei6ah0axMVc/eaj9Mf3rv8RWzS7cc/z66xNtxPEbb9v7nvTAziOREekr1o3ZtGfP6c8oc3Rg466G68q9o97fXthyk+PUWHz7m937WwvWHEmKMIYzXa7jOfpr93x8HXm4bcz4w4dKyueNa2usmFC2vjVQOzkzYceEVT/qdunf6j54+K1R21a9rDv/3O6F9y07enDX29O+XDL1bV3Pu4tWnGiZf+DMQfNd91Qv0z024tBre3+Ob5/+adc78x9avTsZv2Hkxy9vziv7Q+aHlYdf2DI+Mrkh//YkafKbL1r2TD3zwTnr3S8Qs5q6E29I/stZnQSKT+wcuBmMXrJvD2dY+paFG1G+vX8gt3PWHWcOLGqRo30rlXBe8o3bvd7AtOPHHi/wjmq7uj4TmXiSi2QUvNv35V62rbrV8evmpUXH+sKTTofK54Il+yZmnaAs2KtTz1ypFmZkQtUjHYf0sErfp3we8fo/kc//SwLXC6S6QSnzL6vcoSCXSt0CIA3bK1U0EojIA5L20CRCwtPyMprsGwpM8xr6Zf9QYmmeQ8VYXNX9oLl+0Fz/0ZrLZMG+X81l/S/VXAYL9n+ouSyW711zmSl4bnkycTdJeODAYDMCI04RZpPZRBktuOXfqbmsVjeW+d001+ZLNNcr7AFs7LMnJt+dc6AluWB8e8290el7CxLTBhJkZPe+4nZ7fZWwZF/mub8uubXA0bZy1OI33/nw6qVNd9+ZsMaePn32/bM/2nnuq+rzX+WGTr7x0NJHvzixoP6rh6YtnPzaR86Tfzs6xoO29me7zr2wucKV3brhpVO9n6TecKD7lfcMVdte+tzwwR2rBRO6UZpSV7tVZM898P6yo2ChuzIy/qrCbT2Fo29JPHiocZPt6xZXhke/6kb7rybmZc277oopD/ZfYbgyeW71XftHp/e19T8VSCInJYx7sLSInPnOL5InHcNT6dL+YM1T9/SsTpLPbvE9Eno0LfhMeejLGT3cltCate1PLBjtW3zN55+Vlo7u7fv46YnCqbb7J3/mlW6Zfqbv8VcFf3JiUsXqL5IKLbx+4+njHbOzUgeev3Y+vvzVmmN/LEq9admkQrH4hGta4smk9DWdAWvJuDEBeb1huUHqWfz8e40fVXY673j/tT+3fOrK/tNvHtnd/5O30bNBLPH1K6cQpRm7Ig+fW77i6A5HaFF2m5MrPyAwvROmBJff2XtNm1zpq2kPzb+mdVzyukUJMe3l//HaIgus1t8B5yQOhg==
@@ -0,0 +1 @@
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
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
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
@@ -0,0 +1 @@
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
+10 -10
View File
@@ -11,7 +11,7 @@ LangGraph Cloud is available within <a href="https://www.langchain.com/langsmith
Starting from the <a href="https://smith.langchain.com/" target="_blank">LangSmith UI</a>...
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 <a href="https://smith.langchain.com/" target="_blank">LangSmith UI</a>...
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 <a href="https://smith.langchain.com/" target="_blank">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 <a href="https://smith.langchain.com/" target="_blank">LangSmith UI</a>...
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.
@@ -0,0 +1,19 @@
<!doctype html>
<html>
<head>
<title>LangGraph Cloud API Reference</title>
<meta charset="utf-8" />
<meta
name="viewport"
content="width=device-width, initial-scale=1" />
</head>
<body>
<script id="api-reference" data-url="./openapi_control_plane.json"></script>
<script>
var configuration = {}
document.getElementById('api-reference').dataset.configuration =
JSON.stringify(configuration)
</script>
<script src="https://cdn.jsdelivr.net/npm/@scalar/api-reference"></script>
</body>
</html>
@@ -0,0 +1,758 @@
{
"openapi": "3.1.0",
"info": {
"title": "LangGraph Control Plane API (Beta)",
"version": "0.0.1",
"description": "The LangGraph Control Plane API is used to programmatically create and manage LangGraph Server deployments. For example, the APIs can be orchestrated to create custom CI/CD workflows.\n\n### Beta\nThis API is currently in beta and may change or break without notice. This API documentation may not be up-to-date with actual API functionality.\n### Host\nhttps://api.host.langchain.com/\n\n### Authentication\nTo authenticate with the LangGraph Control Plane API, set the `X-Api-Key` header to a valid LangSmith API key for each request.\n\n### Versioning\nEach endpoint path is prefixed with a version (e.g. `v1`).\n\n### Quick Start\n\n1. Call `GET /{version}/projects` to retrieve the `Project` `id`. The `Project` `id` is needed in subsequent API calls.\n2. Call `POST /{version}/projects/{project_id}/revisions` to create a new `Revision` for the `Project`.\n3. Call `GET /{version}/projects/{project_id}/revisions` to get the latest `Revision` (first element in returned list). Get the `Revision` `id`.\n4. Poll for `Revision` `status` until `status` is `DEPLOYED` by calling `GET /{version}/projects/{project_id}/revisions/{revision_id}`."
},
"servers": [
{
"url": "https://api.host.langchain.com"
}
],
"tags": [
{
"name": "Projects (v1)",
"description": "A project corresponds to a LangGraph Server deployment and the associated LangSmith tracing project.\n\nCreating a project via API is not currently supported/documented."
},
{
"name": "Revisions (v1)",
"description": "A revision is a version of a LangGraph Server deployment. Different revisions may contain different code and/or environment variables. A project can have many revisions."
}
],
"paths": {
"/v1/projects": {
"get": {
"tags": ["Projects (v1)"],
"summary": "List Projects",
"description": "List all projects.",
"operationId": "list_projects_projects_get",
"parameters": [
{
"required": false,
"schema": {
"type": "integer",
"title": "Limit",
"description": "Maximum number of results to return. Minimum: 1. Maximum: 100.",
"default": 20
},
"name": "limit",
"in": "query"
},
{
"required": false,
"schema": {
"type": "integer",
"title": "Offset",
"description": "Pagination offset value. Pass this value in subsequent requests to retrieve the next page of results. Minimum: 0.",
"default": 0
},
"name": "offset",
"in": "query"
},
{
"required": false,
"schema": {
"type": "string",
"title": "Name Contains",
"description": "Filter string to filter projects by `name`."
},
"name": "name_contains",
"in": "query"
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Project"
}
}
}
}
}
}
}
},
"/v1/projects/{project_id}": {
"get": {
"tags": ["Projects (v1)"],
"summary": "Get Project",
"description": "Get project by ID.",
"operationId": "get_project_projects__project_id__get",
"parameters": [
{
"required": true,
"schema": {
"type": "string",
"format": "uuid",
"title": "Project ID"
},
"name": "project_id",
"in": "path"
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Project"
}
}
}
}
}
},
"delete": {
"tags": ["Projects (v1)"],
"summary": "Delete Project",
"description": "Delete project by ID.",
"operationId": "delete_project_projects__project_id__delete",
"parameters": [
{
"required": true,
"schema": {
"type": "string",
"format": "uuid",
"title": "Project ID"
},
"name": "project_id",
"in": "path"
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Project"
}
}
}
}
}
}
},
"/v1/projects/{project_id}/revisions": {
"get": {
"tags": ["Revisions (v1)"],
"summary": "List Revisions",
"description": "List revisions of a project.",
"operationId": "list_revisions_projects__project_id__revisions_get",
"parameters": [
{
"required": true,
"schema": {
"type": "string",
"format": "uuid",
"title": "Project ID"
},
"name": "project_id",
"in": "path"
},
{
"required": false,
"schema": {
"type": "integer",
"title": "Limit",
"description": "Maximum number of results to return. Minimum: 1. Maximum: 100.",
"default": 20
},
"name": "limit",
"in": "query"
},
{
"required": false,
"schema": {
"type": "integer",
"title": "Offset",
"description": "Pagination offset value. Pass this value in subsequent requests to retrieve the next page of results. Minimum: 0.",
"default": 0
},
"name": "offset",
"in": "query"
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/Revision"
}
}
}
}
}
}
},
"post": {
"tags": ["Revisions (v1)"],
"summary": "Create Revision",
"description": "Create a new revision for a project.",
"operationId": "create_revision_projects__project_id__revisions_post",
"parameters": [
{
"required": true,
"schema": {
"type": "string",
"format": "uuid",
"title": "Project ID"
},
"name": "project_id",
"in": "path"
}
],
"requestBody": {
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateRevisionRequest"
}
}
},
"required": true
},
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Project"
}
}
}
}
}
}
},
"/v1/projects/{project_id}/revisions/{revision_id}": {
"get": {
"tags": ["Revisions (v1)"],
"summary": "Get Revision",
"description": "Get revision by ID.",
"operationId": "get_revision_projects__project_id__revisions__revision_id__get",
"parameters": [
{
"required": true,
"schema": {
"type": "string",
"format": "uuid",
"title": "Project ID"
},
"name": "project_id",
"in": "path"
},
{
"required": true,
"schema": {
"type": "string",
"format": "uuid",
"title": "Revision ID"
},
"name": "revision_id",
"in": "path"
}
],
"responses": {
"200": {
"description": "Success",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/Revision"
}
}
}
}
}
}
},
"/v1/projects/{project_id}/revisions/{revision_id}/deploy": {
"post": {
"tags": ["Revisions (v1)"],
"summary": "Deploy Revision",
"description": "Deploy revision by ID.\n\nThis endpoint redeploys the deployment of a revision without rebuilding the image for the deployment. Redeploying the deployment of a revision may mitigate intermittent issues with a deployment.\n\nThe revision must be in the `DEPLOYED` status and must be the latest revision of the project.",
"operationId": "deploy_revision_projects__project_id__revisions__revision_id__deploy_post",
"parameters": [
{
"required": true,
"schema": {
"type": "string",
"format": "uuid",
"title": "Project ID"
},
"name": "project_id",
"in": "path"
},
{
"required": true,
"schema": {
"type": "string",
"format": "uuid",
"title": "Revision ID"
},
"name": "revision_id",
"in": "path"
}
],
"responses": {
"400": {
"description": "Revision is not in DEPLOYED status or revision is not the latest revision for the project.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
},
"404": {
"description": "Revision not found.",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/ErrorResponse"
}
}
}
}
}
}
},
"/v1/projects/{project_id}/revisions/{revision_id}/interrupt": {
"post": {
"tags": ["Revisions (v1)"],
"summary": "Interrupt Revision",
"description": "Interrupt revision by ID.\n\nIf the deployment of a revision appears \"stuck\", the revision may need to be interrupted. A new revision cannot be created if the latest revision is in a non-terminal `status`. In this scenario, the revision may need to be interrupted.",
"operationId": "interrupt_revision_projects__project_id__revisions__revision_id__interrupt_post",
"parameters": [
{
"required": true,
"schema": {
"type": "string",
"format": "uuid",
"title": "Project ID"
},
"name": "project_id",
"in": "path"
},
{
"required": true,
"schema": {
"type": "string",
"format": "uuid",
"title": "Revision ID"
},
"name": "revision_id",
"in": "path"
}
]
}
}
},
"components": {
"securitySchemes": {
"apiKeyAuth": {
"type": "apiKey",
"in": "header",
"name": "X-Api-Key"
}
},
"schemas": {
"ContainerSpec": {
"type": "object",
"description": "Container specification for a revision's deployment.\n\nIf any field is omitted or set to `null`, the internal default value is used depending on the deployment type (`dev` or `prod`).",
"properties": {
"min_scale": {
"type": ["integer", "null"],
"description": "Minimum number of replicas in deployment.",
"default": "null"
},
"max_scale": {
"type": ["integer", "null"],
"description": "Maximum number of replicas in deployment.",
"default": "null"
},
"cpu": {
"type": ["integer", "null"],
"description": "Number of vCPU cores per replica.",
"default": "null"
},
"memory_mb": {
"type": ["integer", "null"],
"description": "Amount of memory in MB per replica.",
"default": "null"
}
}
},
"CreateRevisionRequest": {
"type": "object",
"description": "Object for creating a new revision.",
"properties": {
"image_path": {
"type": ["string", "null"],
"description": "URI of the Docker image to deploy.\n\nIf this field is omitted or set to `null`, the previous revision's `image_path` value is used. Set this field for BYOC deployments. Omit this field if creating a new revision from a GitHub repository.",
"default": "null"
},
"repo_path": {
"type": ["string", "null"],
"description": "Path to `langgraph.json` configuration file. For example, `langgraph.json` or `src/langgraph.json`.\n\nIf this field is omitted or set to `null`, the previous revision's `repo_path` value is used. Set this field for deployments from a GitHub repository. Omit this field if creating a new revision from a Docker image.",
"default": "null"
},
"env_vars": {
"type": "array",
"description": "List of environment variables or secrets.\n\nIf this field is omitted or set to `null`, the previous revision's `env_vars` value is used.",
"items": {
"$ref": "#/components/schemas/EnvVar"
},
"default": "null"
},
"shareable": {
"type": ["boolean", "null"],
"description": "Boolean flag to configure if a deployment is shareable through LangGraph Studio.\n\nIf this field is omitted or set to `null`, the previous revision's `shareable` value is used. This field does not apply to BYOC deployments.",
"default": "null"
},
"container_spec": {
"description": "If this field is omitted or set to `null`, the previous revision's `container_spec` value is used.",
"$ref": "#/components/schemas/ContainerSpec",
"default": "null"
}
}
},
"EnvVar": {
"type": "object",
"description": "An environment variable or secret.",
"properties": {
"name": {
"type": "string",
"description": "Environment variable or secret name.",
"required": true
},
"value": {
"type": "string",
"description": "Environment variable or secret value.",
"required": true
},
"type": {
"type": "string",
"enum": [
"default",
"secret"
],
"description": "Field to designate type of the environment variable (default) or secret.",
"required": true
}
}
},
"ErrorResponse": {
"type": "object",
"description": "Error response.",
"properties": {
"detail": {
"type": "string",
"description": "Error details.",
"required": true
}
}
},
"Project": {
"type": "object",
"description": "A project corresponds to a LangGraph Server deployment and the associated LangSmith tracing project.",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "ID of the project.",
"required": true
},
"tool_name": {
"type": ["string", "null"],
"description": "Do not use."
},
"display_name": {
"type": ["string", "null"],
"description": "Do not use."
},
"description": {
"type": ["string", "null"],
"description": "Do not use."
},
"example_input": {
"type": ["object", "null"],
"description": "Do not use."
},
"tenant_id": {
"type": "string",
"format": "uuid",
"description": "ID of the tenant/workspace of the project.",
"required": true
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Timestamp of when the project was created.",
"required": true
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "Timestamp of when the project was updated.",
"required": true
},
"name": {
"type": "string",
"description": "Name of the project.\n\nThis is also the name of the LangSmith tracing project for the LangGraph deployment.",
"required": true
},
"lc_hosted": {
"type": "boolean",
"description": "Boolean flag to indicate if the deployment is hosted in LangChain's cloud or an external cloud (e.g. BYOC).",
"required": true
},
"repo_url": {
"type": ["string", "null"],
"description": "URL of the GitHub repository.\n\nThis field is not used for deployments from a Docker image."
},
"repo_branch": {
"type": ["string", "null"],
"description": "Branch of the GitHub repository.\n\nThis field is not used for deployments from a Docker image."
},
"tracer_session_id": {
"type": ["string", "null"],
"format": "uuid",
"description": "Do not use."
},
"api_key_id": {
"type": ["string", "null"],
"format": "uuid",
"description": "Do not use."
},
"build_on_push": {
"type": "boolean",
"description": "Boolean flag to indicate if a new revision is automatically created on push to GitHub branch (`repo_branch`).\n\nThis field does not apply for BYOC deployments."
},
"input_json_schemas": {
"type": ["object", "null"],
"description": "Do not use."
},
"output_json_schemas": {
"type": ["object", "null"],
"description": "Do not use."
},
"host_integration_id": {
"type": ["string", "null"],
"format": "uuid",
"description": "Do not use."
},
"metadata": {
"$ref": "#/components/schemas/ProjectMetadata"
},
"resource": {
"$ref": "#/components/schemas/ResourceService"
}
}
},
"ProjectMetadata": {
"type": "object",
"description": "Metadata associated with a `Project`.",
"properties": {
"deployment_type": {
"type": "string",
"description": "Development (`dev`) or Production (`prod`) type deployment.",
"enum": [
"dev",
"prod"
]
},
"image_source": {
"type": "string",
"description": "Do not use.",
"enum": [
"github",
"internal_docker",
"external_docker"
]
},
"shareable": {
"type": "boolean",
"description": "Boolean flag to configure if a deployment is shareable through LangGraph Studio.\n\nThis field does not apply to BYOC deployments."
},
"region": {
"type": "string",
"description": "Region of deployment.\n\nRegion value is cloud provider specific."
},
"aws_account_id": {
"type": "string",
"description": "AWS account ID of BYOC deployment.\n\nThis field does not apply to non-BYOC deployments."
},
"aws_external_id": {
"type": "string",
"description": "Do not use."
}
}
},
"ResourceId": {
"type": "object",
"description": "Internal identifier for a `ResourceRevision` or `ResourceService`.",
"properties": {
"type": {
"type": "string",
"enum": [
"revisions",
"services"
]
},
"name": {
"type": "string"
}
}
},
"ResourceRevision": {
"type": "object",
"description": "Internal revision resource for a `ResourceService`.",
"properties": {
"id": {
"$ref": "#/components/schemas/ResourceId"
},
"env_vars": {
"type": "array",
"items": {
"$ref": "#/components/schemas/EnvVar"
}
},
"hosted_langserve_revision_id": {
"type": "string",
"format": "uuid",
"description": "References `id` of a `Revision`."
}
}
},
"ResourceService": {
"type": "object",
"description": "Internal service resource for a `Project`.",
"properties": {
"id": {
"$ref": "#/components/schemas/ResourceId"
},
"url": {
"type": ["string", "null"],
"description": "URL of LangGraph Server deployment."
},
"latest_revision": {
"description": "References latest `ResourceRevision`.\n\nThe latest `ResourceRevision` may not be active if it's currently being deployed.",
"$ref": "#/components/schemas/ResourceRevision"
},
"latest_active_revision": {
"description": "References latest active `ResourceRevision`.\n\nThe latest active `ResourceRevision` is not always the latest `ResourceRevision`.",
"$ref": "#/components/schemas/ResourceRevision"
}
}
},
"Revision": {
"type": "object",
"description": "A revision is a version of a LangGraph Server deployment.\n\nDifferent revisions may contain different code and/or environment variables. A project can have many revisions.",
"properties": {
"id": {
"type": "string",
"format": "uuid",
"description": "ID of the revision.",
"required": true
},
"project_id": {
"type": "string",
"format": "uuid",
"description": "References `id` of `Project`.",
"required": true
},
"created_at": {
"type": "string",
"format": "date-time",
"description": "Timestamp of when the revision was created.",
"required": true
},
"updated_at": {
"type": "string",
"format": "date-time",
"description": "Timestamp of when the revision was updated.",
"required": true
},
"repo_path": {
"type": ["string", "null"],
"description": "Path to `langgraph.json` configuration file. For example, `langgraph.json` or `src/langgraph.json`.\n\nThis field only applies to deployments from a GitHub repository.",
"default": "null"
},
"repo_commit": {
"type": ["string", "null"],
"description": "Git branch name of deployment.\n\nThis field only applies to deployments from a GitHub repository.",
"default": "null"
},
"status": {
"type": "string",
"enum": [
"CREATING",
"AWAITING_BUILD",
"BUILDING",
"AWAITING_DEPLOY",
"DEPLOYING",
"CREATE_FAILED",
"BUILD_FAILED",
"DEPLOY_FAILED",
"DEPLOYED",
"INTERRUPTED",
"UNKNOWN"
],
"description": "Deployment status of the revision.\n\nNon-terminal statuses: `CREATING`, `AWAITING_BUILD`, `BUILDING`, `AWAITING_DEPLOY`, `DEPLOYING`. All other statuses are terminal."
},
"status_message": {
"type": "string",
"description": "Message associated with the `status`."
},
"gcp_build_name": {
"type": ["string", "null"],
"description": "Do not use."
},
"metadata": {
"$ref": "#/components/schemas/RevisionMetadata"
},
"image_path": {
"type": ["string", "null"],
"description": "URI of the Docker image to deploy.\n\nThis field does not apply to deployments from a GitHub repository.",
"default": "null"
},
"container_spec": {
"$ref": "#/components/schemas/ContainerSpec"
},
"resource": {
"$ref": "#/components/schemas/ResourceRevision"
}
}
},
"RevisionMetadata": {
"type": "object",
"description": "Metadata associated with a `Revision`.",
"properties": {
"created_by": {
"type": "object",
"description": "Do not use."
},
"repo_commit_sha": {
"type": "string",
"description": "Git commit SHA of the deployment.\n\nThis field only applies to deployments from a GitHub repository."
}
}
}
}
}
}
+5 -1
View File
@@ -61,6 +61,7 @@ The LangGraph CLI requires a JSON configuration file with the following keys:
All deployments come with a DB-backed BaseStore. Adding an "index" configuration to your `langgraph.json` will enable [semantic search](../deployment/semantic_search.md) within the BaseStore of your deployment.
The `fields` configuration determines which parts of your documents to embed:
- If omitted or set to `["$"]`, the entire document will be embedded
- To embed specific fields, use JSON path notation: `["metadata.title", "content.text"]`
- Documents missing specified fields will still be stored but won't have embeddings for those fields
@@ -288,4 +289,7 @@ RUN set -ex && \
RUN PIP_CONFIG_FILE=/pipconfig.txt PYTHONDONTWRITEBYTECODE=1 pip install --no-cache-dir -c /api/constraints.txt -e /deps/*
ENV LANGSERVE_GRAPHS='{"agent": "/deps/__outer_graphs/src/agent.py:graph", "storm": "/deps/__outer_graphs/src/storm.py:graph"}'
```
```
???+ note "Updating your langgraph.json file"
The `langgraph dockerfile` command translates all the configuration in your `langgraph.json` file into Dockerfile commands. When using this command, you will have to re-run it whenever you update your `langgraph.json` file. Otherwise, your changes will not be reflected when you build or run the dockerfile.
+34 -2
View File
@@ -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,42 @@ See <a href="https://docs.smith.langchain.com/how_to_guides/tracing/sample_trace
## `LANGGRAPH_AUTH_TYPE`
Type of authentication for the LangGraph Cloud API deployment. Valid values: `langsmith`, `noop`.
Type of authentication for the LangGraph Cloud Server deployment. Valid values: `langsmith`, `noop`.
For deployments to LangGraph Cloud, this environment variable is set automatically. For local development or deployments where authentication is handled externally (e.g. self-hosted), set this environment variable to `noop`.
## `LANGSMITH_RUNS_ENDPOINTS`
For [Bring Your Own Cloud (BYOC)](../../concepts/bring_your_own_cloud.md) deployments with [self-hosted LangSmith](https://docs.smith.langchain.com/self_hosting) only.
Set this environment variable to have a BYOC deployment send traces to a self-hosted LangSmith instance. The value of `LANGSMITH_RUNS_ENDPOINTS` is a JSON string: `{"<SELF_HOSTED_LANGSMITH_HOSTNAME>":"<LANGSMITH_API_KEY>"}`.
`SELF_HOSTED_LANGSMITH_HOSTNAME` is the hostname of the self-hosted LangSmith instance. It must be accessible to the BYOC deployment. `LANGSMITH_API_KEY` is a LangSmith API generated from the self-hosted LangSmith instance.
## `N_JOBS_PER_WORKER`
Number of jobs per worker for the LangGraph Cloud task queue. Defaults to `10`.
## `POSTGRES_URI_CUSTOM`
For [Bring Your Own Cloud (BYOC)](../../concepts/bring_your_own_cloud.md) deployments only.
Specify `POSTGRES_URI_CUSTOM` to use an externally managed Postgres instance. The value of `POSTGRES_URI_CUSTOM` must be a valid [Postgres connection URI](https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING-URIS).
Postgres:
- Version 15.8 or higher.
- An initial database must be present and the connection URI must reference the database.
Control Plane Functionality:
- If `POSTGRES_URI_CUSTOM` is specified, the LangGraph Control Plane will not provision a database for the server.
- If `POSTGRES_URI_CUSTOM` is removed, the LangGraph Control Plane will not provision a database for the server and will not delete the externally managed Postgres instance.
- If `POSTGRES_URI_CUSTOM` is removed, deployment of the revision will not succeed. Once `POSTGRES_URI_CUSTOM` is specified, it must always be set for the lifecycle of the deployment.
- If the deployment is deleted, the LangGraph Control Plane will not delete the externally managed Postgres instance.
- The value of `POSTGRES_URI_CUSTOM` can be updated. For example, a password in the URI can be updated.
Database Connectivity:
- The externally managed Postgres instance must be accessible by the LangGraph Server service in the ECS cluster. The BYOC user is responsible for ensuring connectivity.
- For example, if an AWS RDS Postgres instance is provisioned, it can be provisioned in the same VPC (`langgraph-cloud-vpc`) as the ECS cluster with the `langgraph-cloud-service-sg` security group to ensure connectivity.
+3 -2
View File
@@ -39,6 +39,7 @@ LangChain has no direct access to the resources created in your cloud account, a
- Read CloudWatch metrics/logs to monitor your instances/push deployment logs
- https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonRDSFullAccess.html
- Provision `RDS` instances for your LangGraph Cloud instances
- Alternatively, an externally managed Postgres instance can be used instead of the default `RDS` instance. LangChain does not monitor or manage the externally managed Postgres instance. See details for [`POSTGRES_URI_CUSTOM` environment variable](../cloud/reference/env_var.md#postgres_uri_custom).
2. Either
- Tags an existing vpc / subnets as `langgraph-cloud-enabled`
- Creates a new vpc and subnets and tags them as `langgraph-cloud-enabled`
@@ -50,5 +51,5 @@ LangChain has no direct access to the resources created in your cloud account, a
Notes for customers using [self-hosted LangSmith](https://docs.smith.langchain.com/self_hosting):
- Creation of new LangGraph Cloud projects and revisions currently needs to be done on smith.langchain.com.
- You can however set up the project to trace to your self-hosted LangSmith instance if desired
- Creation of new LangGraph Cloud projects and revisions currently needs to be done on `smith.langchain.com`.
- However, you can set up the project to trace to your self-hosted LangSmith instance if desired. See details for [`LANGSMITH_RUNS_ENDPOINTS` environment variable](../cloud/reference/env_var.md#langsmith_runs_endpoints).
+10 -3
View File
@@ -28,6 +28,10 @@ The guide below will explain the differences between the deployment options.
The Self-Hosted Enterprise version is only available for the **Enterprise** plan.
!!! warning "Note"
The LangGraph Platform Deployments view (within LangSmith SaaS and self-hosted LangSmith) is not available for Self-Hosted Enterprise LangGraph deployments. Self-hosted LangGraph deployments are managed externally from LangSmith (e.g. there is no UI to manage these deployments).
With a Self-Hosted Enterprise deployment, you are responsible for managing the infrastructure, including setting up and maintaining required databases and Redis instances.
Youll build a Docker image using the [LangGraph CLI](./langgraph_cli.md), which can then be deployed on your own infrastructure.
@@ -43,6 +47,10 @@ For more information, please see:
The Self-Hosted Lite version is available for all plans.
!!! warning "Note"
The LangGraph Platform Deployments view (within LangSmith SaaS and self-hosted LangSmith) is not available for Self-Hosted Lite LangGraph deployments. Self-hosted LangGraph deployments are managed externally from LangSmith (e.g. there is no UI to manage these deployments).
The Self-Hosted Lite deployment option is a free (up to 1 million nodes executed), limited version of LangGraph Platform that you can run locally or in a self-hosted manner.
With a Self-Hosted Lite deployment, you are responsible for managing the infrastructure, including setting up and maintaining required databases and Redis instances.
@@ -61,12 +69,11 @@ For more information, please see:
The Cloud SaaS version of LangGraph Platform is only available for **Plus** and **Enterprise** plans.
The [Cloud SaaS](./langgraph_cloud.md) version of LangGraph Platform is hosted as part of [LangSmith](https://smith.langchain.com/).
The Cloud SaaS version of LangGraph Platform provides a simple way to deploy and manage your LangGraph applications.
This deployment option provides an integration with GitHub, allowing you to deploy code from any of your repositories on GitHub.
This deployment option provides access to the LangGraph Platform UI (within LangSmith) and an integration with GitHub, allowing you to deploy code from any of your repositories on GitHub.
For more information, please see:
@@ -81,7 +88,7 @@ For more information, please see:
The Bring Your Own Cloud version of LangGraph Platform is only available for **Enterprise** plans.
This combines the best of both worlds for Cloud and Self-Hosted. We manage the infrastructure, so you don't have to, but the infrastructure all runs within your cloud. This is currently only available on AWS.
This combines the best of both worlds for Cloud and Self-Hosted. Create your deployments through the LangGraph Platform UI (within LangSmith) and we manage the infrastructure so you don't have to. The infrastructure all runs within your cloud. This is currently only available on AWS.
For more information please see:
Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 KiB

After

Width:  |  Height:  |  Size: 214 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 397 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 214 KiB

+2 -4
View File
@@ -1,6 +1,4 @@
---
hide:
- navigation
title: Concepts
description: Conceptual Guide for LangGraph
---
@@ -15,11 +13,11 @@ The conceptual guide does not cover step-by-step instructions or specific implem
## LangGraph
**High Level**
### High Level
- [Why LangGraph?](high_level.md): A high-level overview of LangGraph and its goals.
**Concepts**
### Concepts
- [LangGraph Glossary](low_level.md): LangGraph workflows are designed as graphs, with nodes representing different components and edges representing the flow of information between them. This guide provides an overview of the key concepts associated with LangGraph graph primitives.
- [Common Agentic Patterns](agentic_concepts.md): An agent uses an LLM to pick its own control flow to solve more complex problems! Agents are a key building block in many LLM applications. This guide explains the different types of agent architectures and how they can be used to control the flow of an application.
+3
View File
@@ -62,6 +62,9 @@ The server includes all API endpoints for your graph's runs, threads, assistants
The `langgraph dockerfile` command generates a [Dockerfile](https://docs.docker.com/reference/dockerfile/) that can be used to build images for and deploy instances of the [LangGraph API server](./langgraph_server.md). This is useful if you want to further customize the dockerfile or deploy in a more custom way.
??? note "Updating your langgraph.json file"
The `langgraph dockerfile` command translates all the configuration in your `langgraph.json` file into Dockerfile commands. When using this command, you will have to re-run it whenever you update your `langgraph.json` file. Otherwise, your changes will not be reflected when you build or run the dockerfile.
## Related
- [LangGraph CLI API Reference](../cloud/reference/cli.md)
+13 -5
View File
@@ -6,21 +6,29 @@
## Overview
LangGraph's Cloud SaaS is a managed service for deploying LangGraph APIs, regardless of its definition or dependencies. The service offers managed implementations of checkpointers and stores, allowing you to focus on building the right cognitive architecture for your use case. By handling scalable & secure infrastructure, LangGraph Cloud offers the fastest path to getting your LangGraph API deployed to production.
LangGraph's Cloud SaaS is a managed service for deploying LangGraph Servers, regardless of its definition or dependencies. The service offers managed implementations of checkpointers and stores, allowing you to focus on building the right cognitive architecture for your use case. By handling scalable & secure infrastructure, LangGraph Cloud SaaS offers the fastest path to getting your LangGraph Server deployed to production.
## Deployment
A **deployment** is an instance of a LangGraph API. A single deployment can have many [revisions](#revision). When a deployment is created, all the necessary infrastructure (e.g. database, containers, secrets store) are automatically provisioned. See the [architecture diagram](#architecture) below for more details.
A **deployment** is an instance of a LangGraph Server. A single deployment can have many [revisions](#revision). When a deployment is created, all the necessary infrastructure (e.g. database, containers, secrets store) are automatically provisioned. See the [architecture diagram](#architecture) below for more details.
See the [how-to guide](../cloud/deployment/cloud.md#create-new-deployment) for creating a new deployment.
## Resource Allocation
Resource Allocation:
| **Deployment Type** | **CPU** | **Memory** | **Scaling** |
|---------------------|---------|------------|---------------------|
| Development | 1 CPU | 1 GB | Up to 1 container |
| Production | 2 CPU | 2 GB | Up to 10 containers |
See the [how-to guide](../cloud/deployment/cloud.md#create-new-deployment) for creating a new deployment.
## Persistence
A dedicated database is automatically created for each deployment. The database serves as the [persistence layer](../concepts/persistence.md) for the deployment.
When defining a graph to be deployed to LangGraph Cloud SaaS, a [checkpointer](../concepts/persistence.md#checkpointer-libraries) should not be configured by the user. Instead, a checkpointer is automatically configured for the graph.
There is no direct access to the database. All access to the database occurs through the LangGraph Server APIs.
## Autoscaling
`Production` type deployments automatically scale up to 10 containers. Scaling is based on the current request load for a single container. Specifically, the autoscaling implementation scales the deployment so that each container is processing about 10 concurrent requests. For example...
+12 -1
View File
@@ -60,7 +60,18 @@ LangGraph Studio (desktop) requires Docker Desktop version 4.24 or higher. Pleas
#### Configuration or environment issues
Another reason your project might fail to start is because your configuration file is defined incorrectly, or you are missing required environment variables.
Another reason your project might fail to start is because your configuration file is defined incorrectly, or you are missing required environment variables.
!!! Important "Note (desktop only)"
LangGraph Studio Desktop automatically populates `LANGCHAIN_*` environment variables for license verification and tracing, regardless of the contents of the `.env` file. All other environment variables defined in `.env` will be read as normal.
#### Incorrect data region (desktop only)
If you receive a license verification error when attempting to start the LangGraph Server, you may be logged into the incorrect LangSmith data region. Ensure that you're logged into the correct LangSmith data region and ensure that the LangSmith account has access to LangGraph platform.
1. In the top right-hand corner, click the user icon and select `Logout`.
1. At the login screen, click the `Data Region` dropdown menu and select the appropriate data region. Then click `Login to LangSmith`.
### How does interrupt work?
+1 -1
View File
@@ -112,7 +112,7 @@ In this architecture, agents are defined as graph nodes. Each agent can communic
```python
from typing import Literal
from langchain_openai import ChatOpenAI
from langgraph.graph import StateGraph, MessagesState, START
from langgraph.graph import StateGraph, MessagesState, START, END
model = ChatOpenAI()
+6 -9
View File
@@ -147,24 +147,21 @@ In our example, the output of `get_state_history` will look like this:
### Replay
It's also possible to play-back a prior graph execution. If we `invoking` a graph with a `thread_id` and a `checkpoint_id`, then we will *re-play* the graph from a checkpoint that corresponds to the `checkpoint_id`.
It's also possible to play-back a prior graph execution. If we `invoke` a graph with a `thread_id` and a `checkpoint_id`, then we will *re-play* the previously executed steps _before_ a checkpoint that corresponds to the `checkpoint_id`, and only execute the steps _after_ the checkpoint.
* `thread_id` is simply the ID of a thread. This is always required.
* `checkpoint_id` This identifier refers to a specific checkpoint within a thread.
* `thread_id` is the ID of a thread.
* `checkpoint_id` is an identifier that refers to a specific checkpoint within a thread.
You must pass these when invoking the graph as part of the `configurable` portion of the config:
```python
# {"configurable": {"thread_id": "1"}} # valid config
# {"configurable": {"thread_id": "1", "checkpoint_id": "0c62ca34-ac19-445d-bbb0-5b4984975b2a"}} # also valid config
config = {"configurable": {"thread_id": "1"}}
config = {"configurable": {"thread_id": "1", "checkpoint_id": "0c62ca34-ac19-445d-bbb0-5b4984975b2a"}}
graph.invoke(None, config=config)
```
Importantly, LangGraph knows whether a particular checkpoint has been executed previously. If it has, LangGraph simply *re-plays* that particular step in the graph and does not re-execute the step. See this [how to guide on time-travel to learn more about replaying](../how-tos/human_in_the_loop/time-travel.ipynb).
Importantly, LangGraph knows whether a particular step has been executed previously. If it has, LangGraph simply *re-plays* that particular step in the graph and does not re-execute the step, but only for the steps _before_ the provided `checkpoint_id`. All of the steps _after_ `checkpoint_id` will be executed (i.e., a new fork), even if they have been executed previously. See this [how to guide on time-travel to learn more about replaying](../how-tos/human_in_the_loop/time-travel.ipynb).
![Replay](img/persistence/re_play.jpg)
![Replay](img/persistence/re_play.png)
### Update state
+4
View File
@@ -32,6 +32,10 @@ To use the Self-Hosted Enterprise version, you must acquire a license key that y
- Build the docker image for [LangGraph Server](./langgraph_server.md) using the [LangGraph CLI](./langgraph_cli.md).
- Deploy a web server that will run the docker image and pass in the necessary environment variables.
!!! warning "Note"
The LangGraph Platform Deployments view (within LangSmith SaaS and self-hosted LangSmith) is not available for Self-Hosted Lite or Self-Hosted Enterprise LangGraph deployments. Self-hosted LangGraph deployments are managed externally from LangSmith (e.g. there is no UI to manage these deployments).
For step-by-step instructions, see [How to set up a self-hosted deployment of LangGraph](../how-tos/deploy-self-hosted.md).
## Helm Chart
+3 -11
View File
@@ -17,17 +17,9 @@ We call these debugging techniques **Time Travel**, composed of two key actions:
![](./img/human_in_the_loop/replay.png)
Replaying allows us to revisit and reproduce an agent's past actions. This can be done either from the current state (or checkpoint) of the graph or from a specific checkpoint.
Replaying allows us to revisit and reproduce an agent's past actions, up to and including a specific step (checkpoint).
To replay from the current state, simply pass `None` as the input along with a `thread`:
```python
thread = {"configurable": {"thread_id": "1"}}
for event in graph.stream(None, thread, stream_mode="values"):
print(event)
```
To replay actions from a specific checkpoint, start by retrieving all checkpoints for the thread:
To replay actions before a specific checkpoint, start by retrieving all checkpoints for the thread:
```python
all_checkpoints = []
@@ -43,7 +35,7 @@ for event in graph.stream(None, config, stream_mode="values"):
print(event)
```
The graph efficiently replays previously executed nodes instead of re-executing them, leveraging its awareness of prior checkpoint executions.
The graph replays previously executed steps _before_ the provided `checkpoint_id` and executes the steps _after_ `checkpoint_id` (i.e., a new fork), even if they have been executed previously.
## Forking
+8 -1
View File
@@ -37,7 +37,7 @@ async def authenticate(authorization: str) -> str:
detail="Invalid token"
)
# Optional: Add authorization rules
# Add authorization rules to actually control access to resources
@my_auth.on
async def add_owner(
ctx: Auth.types.AuthContext,
@@ -48,6 +48,13 @@ async def add_owner(
metadata = value.setdefault("metadata", {})
metadata.update(filters)
return filters
# Assumes you organize information in store like (user_id, resource_type, resource_id)
@my_auth.on.store()
async def authorize_store(ctx: Auth.types.AuthContext, value: dict):
namespace: tuple = value["namespace"]
assert namespace[0] == ctx.user.identity, "Not authorized"
```
## 2. Update configuration
+1
View File
@@ -29,6 +29,7 @@ You will eventually need to pass in the following environment variables to the L
- `DATABASE_URI`: Postgres connection details. Postgres will be used to store assistants, threads, runs, persist thread state and long term memory, and to manage the state of the background task queue with 'exactly once' semantics.
- `LANGSMITH_API_KEY`: (If using [Self-Hosted Lite](../concepts/deployment_options.md#self-hosted-lite)) LangSmith API key. This will be used to authenticate ONCE at server start up.
- `LANGGRAPH_CLOUD_LICENSE_KEY`: (If using [Self-Hosted Enterprise](../concepts/deployment_options.md#self-hosted-enterprise)) LangGraph Platform license key. This will be used to authenticate ONCE at server start up.
- `LANGCHAIN_ENDPOINT`: To send traces to a [self-hosted LangSmith](https://docs.smith.langchain.com/self_hosting) instance, set `LANGCHAIN_ENDPOINT` to the hostname of the self-hosted LangSmith instance.
## Build the Docker Image

Some files were not shown because too many files have changed in this diff Show More