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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
{
lib,
stdenv,
buildPythonPackage,
fetchFromGitHub,
# build-system
hatchling,
# dependencies
langchain-core,
langgraph-checkpoint,
langgraph-prebuilt,
langgraph-sdk,
pydantic,
xxhash,
# tests
aiosqlite,
dataclasses-json,
fakeredis,
grandalf,
httpx,
langgraph-checkpoint-postgres,
langgraph-checkpoint-sqlite,
langsmith,
psycopg,
pytest-asyncio,
pytest-mock,
pytest-repeat,
pytest-xdist,
pytestCheckHook,
syrupy,
postgresql,
postgresqlTestHook,
redisTestHook,
# passthru
nix-update-script,
}:
buildPythonPackage rec {
pname = "langgraph";
version = "1.0.5";
pyproject = true;
src = fetchFromGitHub {
owner = "langchain-ai";
repo = "langgraph";
tag = version;
hash = "sha256-QvnBb69JxOVfZ/22igX+WVatJNAUrHUrh3aIpztYmmc=";
};
postgresqlTestSetupPost = ''
substituteInPlace tests/conftest_store.py \
--replace-fail "DEFAULT_POSTGRES_URI = \"postgres://postgres:postgres@localhost:5442/\"" "DEFAULT_POSTGRES_URI = \"postgres:///$PGDATABASE\""
substituteInPlace tests/conftest_checkpointer.py \
--replace-fail "DEFAULT_POSTGRES_URI = \"postgres://postgres:postgres@localhost:5442/\"" "DEFAULT_POSTGRES_URI = \"postgres:///$PGDATABASE\""
'';
sourceRoot = "${src.name}/libs/langgraph";
build-system = [ hatchling ];
dependencies = [
langchain-core
langgraph-checkpoint
langgraph-prebuilt
langgraph-sdk
pydantic
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
redisTestHook
fakeredis
langgraph-checkpoint
];
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 = [
# Requires `langgraph dev` to be running
"test_remote_graph_basic_invoke"
"test_remote_graph_stream_messages_tuple"
# 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"
];
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"
];
# Since `langgraph` is the only unprefixed package, we have to use an explicit match
passthru = {
# python updater script sets the wrong tag
skipBulkUpdate = true;
updateScript = nix-update-script {
extraArgs = [
"--version-regex"
"([0-9.]+)"
];
};
};
meta = {
description = "Build resilient language agents as graphs";
homepage = "https://github.com/langchain-ai/langgraph";
changelog = "https://github.com/langchain-ai/langgraph/releases/tag/${src.tag}";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ sarahec ];
};
}
|