langgraph-api 0.2.113__tar.gz → 0.2.114__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of langgraph-api might be problematic. Click here for more details.

Files changed (113) hide show
  1. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/PKG-INFO +2 -2
  2. langgraph_api-0.2.114/langgraph_api/__init__.py +1 -0
  3. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/api/assistants.py +7 -6
  4. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/api/runs.py +7 -6
  5. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/api/threads.py +5 -11
  6. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/server.py +1 -1
  7. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/utils/__init__.py +17 -1
  8. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/pyproject.toml +1 -1
  9. langgraph_api-0.2.113/langgraph_api/__init__.py +0 -1
  10. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/.gitignore +0 -0
  11. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/LICENSE +0 -0
  12. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/Makefile +0 -0
  13. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/README.md +0 -0
  14. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/benchmark/.gitignore +0 -0
  15. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/benchmark/Makefile +0 -0
  16. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/benchmark/README.md +0 -0
  17. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/benchmark/burst.js +0 -0
  18. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/benchmark/ramp.js +0 -0
  19. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/benchmark/weather.js +0 -0
  20. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/constraints.txt +0 -0
  21. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/forbidden.txt +0 -0
  22. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/healthcheck.py +0 -0
  23. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/api/__init__.py +0 -0
  24. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/api/mcp.py +0 -0
  25. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/api/meta.py +0 -0
  26. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/api/openapi.py +0 -0
  27. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/api/store.py +0 -0
  28. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/api/ui.py +0 -0
  29. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/asgi_transport.py +0 -0
  30. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/asyncio.py +0 -0
  31. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/auth/__init__.py +0 -0
  32. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/auth/custom.py +0 -0
  33. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/auth/langsmith/__init__.py +0 -0
  34. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/auth/langsmith/backend.py +0 -0
  35. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/auth/langsmith/client.py +0 -0
  36. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/auth/middleware.py +0 -0
  37. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/auth/noop.py +0 -0
  38. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/auth/studio_user.py +0 -0
  39. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/cli.py +0 -0
  40. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/command.py +0 -0
  41. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/config.py +0 -0
  42. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/cron_scheduler.py +0 -0
  43. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/errors.py +0 -0
  44. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/feature_flags.py +0 -0
  45. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/graph.py +0 -0
  46. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/http.py +0 -0
  47. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/http_metrics.py +0 -0
  48. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/js/.gitignore +0 -0
  49. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/js/.prettierrc +0 -0
  50. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/js/__init__.py +0 -0
  51. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/js/base.py +0 -0
  52. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/js/build.mts +0 -0
  53. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/js/client.http.mts +0 -0
  54. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/js/client.mts +0 -0
  55. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/js/errors.py +0 -0
  56. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/js/global.d.ts +0 -0
  57. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/js/package.json +0 -0
  58. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/js/remote.py +0 -0
  59. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/js/schema.py +0 -0
  60. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/js/src/graph.mts +0 -0
  61. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/js/src/load.hooks.mjs +0 -0
  62. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/js/src/preload.mjs +0 -0
  63. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/js/src/utils/files.mts +0 -0
  64. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/js/src/utils/importMap.mts +0 -0
  65. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
  66. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/js/src/utils/serde.mts +0 -0
  67. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/js/sse.py +0 -0
  68. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/js/traceblock.mts +0 -0
  69. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/js/tsconfig.json +0 -0
  70. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/js/ui.py +0 -0
  71. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/js/yarn.lock +0 -0
  72. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/logging.py +0 -0
  73. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/metadata.py +0 -0
  74. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/middleware/__init__.py +0 -0
  75. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/middleware/http_logger.py +0 -0
  76. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/middleware/private_network.py +0 -0
  77. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/middleware/request_id.py +0 -0
  78. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/models/__init__.py +0 -0
  79. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/models/run.py +0 -0
  80. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/patch.py +0 -0
  81. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/queue_entrypoint.py +0 -0
  82. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/route.py +0 -0
  83. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/schema.py +0 -0
  84. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/serde.py +0 -0
  85. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/sse.py +0 -0
  86. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/state.py +0 -0
  87. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/store.py +0 -0
  88. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/stream.py +0 -0
  89. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/thread_ttl.py +0 -0
  90. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/traceblock.py +0 -0
  91. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/tunneling/cloudflare.py +0 -0
  92. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/utils/cache.py +0 -0
  93. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/utils/config.py +0 -0
  94. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/utils/future.py +0 -0
  95. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/utils.py +0 -0
  96. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/validation.py +0 -0
  97. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/webhook.py +0 -0
  98. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_api/worker.py +0 -0
  99. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_license/__init__.py +0 -0
  100. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_license/validation.py +0 -0
  101. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_runtime/__init__.py +0 -0
  102. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_runtime/checkpoint.py +0 -0
  103. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_runtime/database.py +0 -0
  104. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_runtime/lifespan.py +0 -0
  105. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_runtime/metrics.py +0 -0
  106. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_runtime/ops.py +0 -0
  107. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_runtime/queue.py +0 -0
  108. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_runtime/retry.py +0 -0
  109. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/langgraph_runtime/store.py +0 -0
  110. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/logging.json +0 -0
  111. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/openapi.json +0 -0
  112. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/scripts/create_license.py +0 -0
  113. {langgraph_api-0.2.113 → langgraph_api-0.2.114}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.2.113
3
+ Version: 0.2.114
4
4
  Author-email: Nuno Campos <nuno@langchain.dev>, Will Fu-Hinthorn <will@langchain.dev>
5
5
  License: Elastic-2.0
6
6
  License-File: LICENSE
@@ -11,7 +11,7 @@ Requires-Dist: httpx>=0.25.0
11
11
  Requires-Dist: jsonschema-rs<0.30,>=0.20.0
12
12
  Requires-Dist: langchain-core>=0.3.64
13
13
  Requires-Dist: langgraph-checkpoint>=2.0.23
14
- Requires-Dist: langgraph-runtime-inmem<0.7,>=0.6.7
14
+ Requires-Dist: langgraph-runtime-inmem<0.7,>=0.6.8
15
15
  Requires-Dist: langgraph-sdk>=0.2.0
16
16
  Requires-Dist: langgraph>=0.4.0
17
17
  Requires-Dist: langsmith>=0.3.45
@@ -0,0 +1 @@
1
+ __version__ = "0.2.114"
@@ -17,7 +17,7 @@ from langgraph_api.graph import get_assistant_id, get_graph
17
17
  from langgraph_api.js.base import BaseRemotePregel
18
18
  from langgraph_api.route import ApiRequest, ApiResponse, ApiRoute
19
19
  from langgraph_api.serde import ajson_loads
20
- from langgraph_api.utils import fetchone, validate_uuid
20
+ from langgraph_api.utils import fetchone, get_pagination_headers, validate_uuid
21
21
  from langgraph_api.validation import (
22
22
  AssistantCreate,
23
23
  AssistantPatch,
@@ -172,20 +172,21 @@ async def search_assistants(
172
172
  ) -> ApiResponse:
173
173
  """List assistants."""
174
174
  payload = await request.json(AssistantSearchRequest)
175
+ offset = int(payload.get("offset") or 0)
175
176
  async with connect() as conn:
176
- assistants_iter, total = await Assistants.search(
177
+ assistants_iter, next_offset = await Assistants.search(
177
178
  conn,
178
179
  graph_id=payload.get("graph_id"),
179
180
  metadata=payload.get("metadata"),
180
181
  limit=int(payload.get("limit") or 10),
181
- offset=int(payload.get("offset") or 0),
182
+ offset=offset,
182
183
  sort_by=payload.get("sort_by"),
183
184
  sort_order=payload.get("sort_order"),
184
185
  )
185
- return ApiResponse(
186
- [assistant async for assistant in assistants_iter],
187
- headers={"X-Pagination-Total": str(total)},
186
+ assistants, response_headers = await get_pagination_headers(
187
+ assistants_iter, next_offset, offset
188
188
  )
189
+ return ApiResponse(assistants, headers=response_headers)
189
190
 
190
191
 
191
192
  @retry_db
@@ -12,7 +12,7 @@ from langgraph_api.asyncio import ValueEvent, aclosing
12
12
  from langgraph_api.models.run import create_valid_run
13
13
  from langgraph_api.route import ApiRequest, ApiResponse, ApiRoute
14
14
  from langgraph_api.sse import EventSourceResponse
15
- from langgraph_api.utils import fetchone, validate_uuid
15
+ from langgraph_api.utils import fetchone, get_pagination_headers, validate_uuid
16
16
  from langgraph_api.validation import (
17
17
  CronCreate,
18
18
  CronSearch,
@@ -568,20 +568,21 @@ async def search_crons(request: ApiRequest):
568
568
  if thread_id := payload.get("thread_id"):
569
569
  validate_uuid(thread_id, "Invalid thread ID: must be a UUID")
570
570
 
571
+ offset = int(payload.get("offset", 0))
571
572
  async with connect() as conn:
572
- crons_iter, total = await Crons.search(
573
+ crons_iter, next_offset = await Crons.search(
573
574
  conn,
574
575
  assistant_id=assistant_id,
575
576
  thread_id=thread_id,
576
577
  limit=int(payload.get("limit", 10)),
577
- offset=int(payload.get("offset", 0)),
578
+ offset=offset,
578
579
  sort_by=payload.get("sort_by"),
579
580
  sort_order=payload.get("sort_order"),
580
581
  )
581
- return ApiResponse(
582
- [cron async for cron in crons_iter],
583
- headers={"X-Pagination-Total": str(total)},
582
+ crons, response_headers = await get_pagination_headers(
583
+ crons_iter, next_offset, offset
584
584
  )
585
+ return ApiResponse(crons, headers=response_headers)
585
586
 
586
587
 
587
588
  runs_routes = [
@@ -6,7 +6,7 @@ from starlette.routing import BaseRoute
6
6
 
7
7
  from langgraph_api.route import ApiRequest, ApiResponse, ApiRoute
8
8
  from langgraph_api.state import state_snapshot_to_thread_state
9
- from langgraph_api.utils import fetchone, validate_uuid
9
+ from langgraph_api.utils import fetchone, get_pagination_headers, validate_uuid
10
10
  from langgraph_api.validation import (
11
11
  ThreadCreate,
12
12
  ThreadPatch,
@@ -61,7 +61,7 @@ async def search_threads(
61
61
  limit = int(payload.get("limit") or 10)
62
62
  offset = int(payload.get("offset") or 0)
63
63
  async with connect() as conn:
64
- iter, next_offset = await Threads.search(
64
+ threads_iter, next_offset = await Threads.search(
65
65
  conn,
66
66
  status=payload.get("status"),
67
67
  values=payload.get("values"),
@@ -71,15 +71,9 @@ async def search_threads(
71
71
  sort_by=payload.get("sort_by"),
72
72
  sort_order=payload.get("sort_order"),
73
73
  )
74
- threads = [thread async for thread in iter]
75
- if next_offset is None:
76
- response_headers = {"X-Pagination-Total": str(len(threads) + offset)}
77
- else:
78
- cur = str(next_offset)
79
- response_headers = {
80
- "X-Pagination-Total": cur,
81
- "X-Pagination-Next": cur,
82
- }
74
+ threads, response_headers = await get_pagination_headers(
75
+ threads_iter, next_offset, offset
76
+ )
83
77
  return ApiResponse(threads, headers=response_headers)
84
78
 
85
79
 
@@ -71,7 +71,7 @@ middleware.extend(
71
71
  allow_credentials=True,
72
72
  allow_methods=["*"],
73
73
  allow_headers=["*"],
74
- expose_headers=["x-pagination-total"],
74
+ expose_headers=["x-pagination-total", "x-pagination-next"],
75
75
  )
76
76
  if config.CORS_CONFIG is None
77
77
  else Middleware(
@@ -1,6 +1,6 @@
1
1
  import contextvars
2
2
  import uuid
3
- from collections.abc import AsyncIterator
3
+ from collections.abc import AsyncGenerator, AsyncIterator
4
4
  from contextlib import asynccontextmanager
5
5
  from datetime import datetime
6
6
  from typing import Any, Protocol, TypeAlias, TypeVar
@@ -127,3 +127,19 @@ class SchemaGenerator(BaseSchemaGenerator):
127
127
  schema["paths"][endpoint.path][endpoint.http_method] = parsed
128
128
 
129
129
  return schema
130
+
131
+
132
+ async def get_pagination_headers(
133
+ resource: AsyncGenerator[T],
134
+ next_offset: int | None,
135
+ offset: int,
136
+ ) -> tuple[list[T], dict[str, str]]:
137
+ resources = [r async for r in resource]
138
+ if next_offset is None:
139
+ response_headers = {"X-Pagination-Total": str(len(resources) + offset)}
140
+ else:
141
+ response_headers = {
142
+ "X-Pagination-Total": str(next_offset + 1), # Next offset will be "n"
143
+ "X-Pagination-Next": str(next_offset),
144
+ }
145
+ return resources, response_headers
@@ -31,7 +31,7 @@ dependencies = [
31
31
  "cryptography>=42.0.0,<45.0",
32
32
  "langgraph-sdk>=0.2.0",
33
33
  "cloudpickle>=3.0.0",
34
- "langgraph-runtime-inmem>=0.6.7,<0.7",
34
+ "langgraph-runtime-inmem>=0.6.8,<0.7",
35
35
  "truststore>=0.1",
36
36
  ]
37
37
 
@@ -1 +0,0 @@
1
- __version__ = "0.2.113"
File without changes
File without changes