1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
|
{
lib,
stdenv,
buildPythonPackage,
fetchFromGitHub,
# build-system
poetry-core,
# dependencies
langchain-core,
langgraph-checkpoint,
langgraph-prebuilt,
langgraph-sdk,
xxhash,
# tests
aiosqlite,
dataclasses-json,
grandalf,
httpx,
langgraph-checkpoint-postgres,
langgraph-checkpoint-sqlite,
langsmith,
psycopg,
pydantic,
pytest-asyncio,
pytest-mock,
pytest-repeat,
pytest-xdist,
pytestCheckHook,
syrupy,
postgresql,
postgresqlTestHook,
}:
buildPythonPackage rec {
pname = "langgraph";
version = "0.3.24";
pyproject = true;
src = fetchFromGitHub {
owner = "langchain-ai";
repo = "langgraph";
tag = "${version}";
hash = "sha256-NlTpBXBeADlIHQDlt0muJEuoKOgXiAtAo8GoU5CsvZo=";
};
postgresqlTestSetupPost = ''
substituteInPlace tests/conftest.py \
--replace-fail "DEFAULT_POSTGRES_URI = \"postgres://postgres:postgres@localhost:5442/\"" "DEFAULT_POSTGRES_URI = \"postgres:///$PGDATABASE\""
'';
sourceRoot = "${src.name}/libs/langgraph";
build-system = [ poetry-core ];
dependencies = [
langchain-core
langgraph-checkpoint
langgraph-prebuilt
langgraph-sdk
xxhash
];
pythonImportsCheck = [ "langgraph" ];
# postgresql doesn't play nicely with the darwin sandbox:
# FATAL: could not create shared memory segment: Operation not permitted
doCheck = !stdenv.hostPlatform.isDarwin;
nativeCheckInputs = [
pytestCheckHook
postgresql
postgresqlTestHook
];
checkInputs = [
aiosqlite
dataclasses-json
grandalf
httpx
langgraph-checkpoint-postgres
langgraph-checkpoint-sqlite
langsmith
psycopg
psycopg.pool
pydantic
pytest-asyncio
pytest-mock
pytest-repeat
pytest-xdist
syrupy
];
disabledTests = [
# test is flaky due to pydantic error on the exception
"test_doesnt_warn_valid_schema"
"test_tool_node_inject_store"
# Disabling tests that requires to create new random databases
"test_cancel_graph_astream"
"test_cancel_graph_astream_events_v2"
"test_channel_values"
"test_fork_always_re_runs_nodes"
"test_interruption_without_state_updates"
"test_interruption_without_state_updates_async"
"test_invoke_two_processes_in_out_interrupt"
"test_nested_graph_interrupts"
"test_no_modifier_async"
"test_no_modifier"
"test_pending_writes_resume"
"test_remove_message_via_state_update"
# pydantic.errors.PydanticForbiddenQualifier,
# see https://github.com/langchain-ai/langgraph/issues/4360
"test_state_schema_optional_values"
];
disabledTestPaths = [
# psycopg.errors.InsufficientPrivilege: permission denied to create database
"tests/test_checkpoint_migration.py"
"tests/test_large_cases.py"
"tests/test_large_cases_async.py"
"tests/test_pregel.py"
"tests/test_pregel_async.py"
];
passthru = {
inherit (langgraph-sdk) updateScript;
skipBulkUpdate = true; # Broken, see https://github.com/NixOS/nixpkgs/issues/379898
};
meta = {
description = "Build resilient language agents as graphs";
homepage = "https://github.com/langchain-ai/langgraph";
changelog = "https://github.com/langchain-ai/langgraph/releases/tag/${version}";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ sarahec ];
};
}
|