langgraph-api 0.10.3__tar.gz → 0.11.0__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.
Files changed (299) hide show
  1. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/Makefile +1 -1
  2. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/PKG-INFO +7 -5
  3. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/continuous/pyproject.toml +3 -3
  4. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/continuous/uv.lock +12 -12
  5. langgraph_api-0.11.0/langgraph_api/__init__.py +1 -0
  6. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/_checkpointer/_adapter.py +26 -1
  7. langgraph_api-0.11.0/langgraph_api/api/meta.py +123 -0
  8. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/api/runs.py +8 -6
  9. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/api/threads.py +11 -8
  10. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/cli.py +31 -5
  11. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/config/__init__.py +26 -4
  12. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/event_streaming/service.py +141 -124
  13. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/event_streaming/session.py +6 -6
  14. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/event_streaming/state_normalizers.py +8 -0
  15. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/feature_flags.py +10 -0
  16. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/grpc/ops/__init__.py +19 -4
  17. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/grpc/ops/runs.py +7 -0
  18. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/grpc/servicers/checkpointer.py +14 -0
  19. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/client.http.mts +2 -1
  20. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/client.mts +3 -2
  21. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/package.json +2 -2
  22. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/remote.py +43 -3
  23. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/yarn.lock +8 -8
  24. langgraph_api-0.11.0/langgraph_api/metrics_collector.py +184 -0
  25. langgraph_api-0.11.0/langgraph_api/metrics_otlp.py +772 -0
  26. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/middleware/http_logger.py +24 -0
  27. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/models/run.py +7 -0
  28. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/queue_entrypoint.py +13 -36
  29. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/release_tags.py +10 -0
  30. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/schema.py +3 -0
  31. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/self_hosted_metrics.py +1 -1
  32. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/stream.py +23 -4
  33. langgraph_api-0.11.0/langgraph_api/tracing_session.py +22 -0
  34. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/worker.py +12 -7
  35. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/checkpointer.py +115 -21
  36. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/conversion/checkpoint.py +95 -6
  37. langgraph_api-0.11.0/langgraph_grpc_common/conversion/store.py +442 -0
  38. langgraph_api-0.11.0/langgraph_grpc_common/conversion/struct.py +60 -0
  39. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/conversion/value.py +11 -1
  40. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/__init__.py +4 -0
  41. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/checkpointer_pb2.py +13 -3
  42. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +113 -0
  43. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +47 -0
  44. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +24 -0
  45. langgraph_api-0.11.0/langgraph_grpc_common/proto/core_api_pb2.py +274 -0
  46. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/core_api_pb2.pyi +17 -5
  47. langgraph_api-0.11.0/langgraph_grpc_common/proto/store_pb2.py +82 -0
  48. langgraph_api-0.11.0/langgraph_grpc_common/proto/store_pb2.pyi +652 -0
  49. langgraph_api-0.11.0/langgraph_grpc_common/proto/store_pb2_grpc.py +101 -0
  50. langgraph_api-0.11.0/langgraph_grpc_common/proto/store_pb2_grpc.pyi +58 -0
  51. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/serde.py +36 -4
  52. langgraph_api-0.11.0/langgraph_grpc_common/store.py +109 -0
  53. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/openapi.json +8 -1
  54. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/pyproject.toml +6 -4
  55. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/uv.lock +111 -82
  56. langgraph_api-0.10.3/langgraph_api/__init__.py +0 -1
  57. langgraph_api-0.10.3/langgraph_api/api/meta.py +0 -233
  58. langgraph_api-0.10.3/langgraph_api/metrics_datadog.py +0 -439
  59. langgraph_api-0.10.3/langgraph_grpc_common/conversion/struct.py +0 -27
  60. langgraph_api-0.10.3/langgraph_grpc_common/proto/core_api_pb2.py +0 -274
  61. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/.gitignore +0 -0
  62. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/LICENSE +0 -0
  63. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/README.md +0 -0
  64. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/.gitignore +0 -0
  65. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/Makefile +0 -0
  66. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/README.md +0 -0
  67. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/benchmark-runners/assistant.ts +0 -0
  68. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/benchmark-runners/benchmark-runner.ts +0 -0
  69. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/benchmark-runners/benchmark_profiles.ts +0 -0
  70. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/benchmark-runners/benchmarks.ts +0 -0
  71. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/benchmark-runners/cancel_first_second_completes.ts +0 -0
  72. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/benchmark-runners/enqueued_runs_order.ts +0 -0
  73. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/benchmark-runners/log-failure.ts +0 -0
  74. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/benchmark-runners/meta_workload.ts +0 -0
  75. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/benchmark-runners/stream_write.ts +0 -0
  76. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/benchmark-runners/thread.ts +0 -0
  77. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/benchmark-runners/thread_runs_metadata_search.ts +0 -0
  78. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/benchmark-runners/threads_search_metadata.ts +0 -0
  79. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/benchmark-runners/types.ts +0 -0
  80. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/benchmark-runners/wait_write.ts +0 -0
  81. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/capacity_dd_report.py +0 -0
  82. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/capacity_k6.js +0 -0
  83. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/capacity_runner.mjs +0 -0
  84. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/capacity_slack_report.py +0 -0
  85. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/capacity_urls.mjs +0 -0
  86. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/clean-cli.js +0 -0
  87. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/clean.js +0 -0
  88. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/continuous/README.md +0 -0
  89. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/continuous/runner.py +0 -0
  90. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/graphs.js +0 -0
  91. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/mixed_workload_k6.js +0 -0
  92. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/mixed_workload_runner.mjs +0 -0
  93. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/package.json +0 -0
  94. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/ramp.js +0 -0
  95. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/reporting/dd_reporting.py +0 -0
  96. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/reporting/slack_slowest_runs.py +0 -0
  97. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/reporting/slack_summary.py +0 -0
  98. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/run_local.sh +0 -0
  99. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/staircase.py +0 -0
  100. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/staircase_step_k6.js +0 -0
  101. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/tsconfig.json +0 -0
  102. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/update-revision.js +0 -0
  103. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/benchmark/weather.js +0 -0
  104. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/constraints.txt +0 -0
  105. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/custom_store.sql +0 -0
  106. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/forbidden.txt +0 -0
  107. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/hatch_build.py +0 -0
  108. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/healthcheck.py +0 -0
  109. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph-cloud-debugging-20260210132856.zip +0 -0
  110. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/_checkpointer/__init__.py +0 -0
  111. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/_checkpointer/protocol.py +0 -0
  112. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/_factory_utils.py +0 -0
  113. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/api/__init__.py +0 -0
  114. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/api/a2a.py +0 -0
  115. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/api/assistants.py +0 -0
  116. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/api/event_streaming.py +0 -0
  117. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/api/mcp/__init__.py +0 -0
  118. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/api/mcp/_constants.py +0 -0
  119. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/api/mcp/_handlers.py +0 -0
  120. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/api/mcp/_models.py +0 -0
  121. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/api/mcp/_routes.py +0 -0
  122. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/api/mcp/_sanitizers.py +0 -0
  123. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/api/openapi.py +0 -0
  124. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/api/profile.py +0 -0
  125. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/api/store.py +0 -0
  126. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/api/ui.py +0 -0
  127. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/asgi_transport.py +0 -0
  128. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/asyncio.py +0 -0
  129. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/auth/__init__.py +0 -0
  130. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/auth/custom.py +0 -0
  131. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/auth/errors.py +0 -0
  132. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/auth/langsmith/__init__.py +0 -0
  133. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/auth/langsmith/backend.py +0 -0
  134. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/auth/langsmith/client.py +0 -0
  135. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/auth/middleware.py +0 -0
  136. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/auth/noop.py +0 -0
  137. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/auth/studio_user.py +0 -0
  138. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/cache.py +0 -0
  139. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/command.py +0 -0
  140. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/config/_parse.py +0 -0
  141. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/config/schemas.py +0 -0
  142. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/cron_scheduler.py +0 -0
  143. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/encryption/__init__.py +0 -0
  144. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/encryption/aes_json.py +0 -0
  145. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/encryption/context.py +0 -0
  146. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/encryption/custom.py +0 -0
  147. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/encryption/middleware.py +0 -0
  148. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/encryption/shared.py +0 -0
  149. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/errors.py +0 -0
  150. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/event_streaming/__init__.py +0 -0
  151. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/event_streaming/capabilities.py +0 -0
  152. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/event_streaming/constants.py +0 -0
  153. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/event_streaming/event_normalizers.py +0 -0
  154. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/event_streaming/namespace.py +0 -0
  155. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/event_streaming/types.py +0 -0
  156. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/graph.py +0 -0
  157. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/grpc/__init__.py +0 -0
  158. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/grpc/client.py +0 -0
  159. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
  160. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/grpc/ops/assistants.py +0 -0
  161. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/grpc/ops/cache.py +0 -0
  162. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/grpc/ops/crons.py +0 -0
  163. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/grpc/ops/threads.py +0 -0
  164. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/grpc/server.py +0 -0
  165. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/grpc/servicers/__init__.py +0 -0
  166. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/grpc/servicers/encryption.py +0 -0
  167. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/http.py +0 -0
  168. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/http_metrics.py +0 -0
  169. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/http_metrics_utils.py +0 -0
  170. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/.gitignore +0 -0
  171. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/.prettierrc +0 -0
  172. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/__init__.py +0 -0
  173. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/base.py +0 -0
  174. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/build.mts +0 -0
  175. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/errors.py +0 -0
  176. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/global.d.ts +0 -0
  177. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/schema.py +0 -0
  178. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/src/graph.mts +0 -0
  179. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/src/load.hooks.mjs +0 -0
  180. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/src/preload.mjs +0 -0
  181. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/src/utils/experiment-tracing.mts +0 -0
  182. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/src/utils/files.mts +0 -0
  183. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/src/utils/importMap.mts +0 -0
  184. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
  185. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/src/utils/serde.mts +0 -0
  186. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/sse.py +0 -0
  187. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/traceblock.mts +0 -0
  188. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/tsconfig.json +0 -0
  189. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/js/ui.py +0 -0
  190. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/lc_security/__init__.py +0 -0
  191. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/lc_security/exceptions.py +0 -0
  192. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/lc_security/policy.py +0 -0
  193. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/lc_security/transport.py +0 -0
  194. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/logging.py +0 -0
  195. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/metadata.py +0 -0
  196. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/middleware/__init__.py +0 -0
  197. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/middleware/ensure_store.py +0 -0
  198. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/middleware/private_network.py +0 -0
  199. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/middleware/request_id.py +0 -0
  200. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/models/__init__.py +0 -0
  201. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/otel_context.py +0 -0
  202. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/patch.py +0 -0
  203. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/route.py +0 -0
  204. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/self_hosted_logs.py +0 -0
  205. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/serde.py +0 -0
  206. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/server.py +0 -0
  207. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/sse.py +0 -0
  208. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/state.py +0 -0
  209. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/store.py +0 -0
  210. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/stream_v2.py +0 -0
  211. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/timing/__init__.py +0 -0
  212. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/timing/profiler.py +0 -0
  213. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/timing/timer.py +0 -0
  214. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/traceblock.py +0 -0
  215. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/tunneling/cloudflare.py +0 -0
  216. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/utils/__init__.py +0 -0
  217. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/utils/cache.py +0 -0
  218. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/utils/config.py +0 -0
  219. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/utils/errors.py +0 -0
  220. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/utils/extract.py +0 -0
  221. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/utils/future.py +0 -0
  222. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/utils/headers.py +0 -0
  223. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/utils/network.py +0 -0
  224. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/utils/retriable_client.py +0 -0
  225. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/utils/stream_codec.py +0 -0
  226. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/utils/uuids.py +0 -0
  227. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/validation.py +0 -0
  228. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_api/webhook.py +0 -0
  229. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/__init__.py +0 -0
  230. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/conversion/__init__.py +0 -0
  231. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/conversion/_compat.py +0 -0
  232. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/conversion/config.py +0 -0
  233. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/conversion/durability.py +0 -0
  234. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +0 -0
  235. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
  236. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
  237. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/encryption_pb2.pyi +0 -0
  238. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +0 -0
  239. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
  240. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
  241. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/engine_common_pb2.pyi +0 -0
  242. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +0 -0
  243. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
  244. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
  245. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
  246. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.py +0 -0
  247. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.pyi +0 -0
  248. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
  249. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
  250. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +0 -0
  251. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
  252. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.py +0 -0
  253. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.pyi +0 -0
  254. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.py +0 -0
  255. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.pyi +0 -0
  256. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
  257. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
  258. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +0 -0
  259. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
  260. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
  261. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
  262. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +0 -0
  263. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
  264. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
  265. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
  266. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +0 -0
  267. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
  268. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +0 -0
  269. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +0 -0
  270. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +0 -0
  271. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
  272. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
  273. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
  274. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +0 -0
  275. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
  276. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
  277. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
  278. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.py +0 -0
  279. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.pyi +0 -0
  280. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
  281. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
  282. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/errors_pb2_grpc.py +0 -0
  283. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
  284. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_license/__init__.py +0 -0
  285. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_license/validation.py +0 -0
  286. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_runtime/__init__.py +0 -0
  287. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_runtime/checkpoint.py +0 -0
  288. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_runtime/database.py +0 -0
  289. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_runtime/lifespan.py +0 -0
  290. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_runtime/metrics.py +0 -0
  291. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_runtime/ops.py +0 -0
  292. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_runtime/queue.py +0 -0
  293. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_runtime/retry.py +0 -0
  294. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_runtime/routes.py +0 -0
  295. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/langgraph_runtime/store.py +0 -0
  296. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/logging.json +0 -0
  297. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/scripts/build_wheel.py +0 -0
  298. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/scripts/create_license.py +0 -0
  299. {langgraph_api-0.10.3 → langgraph_api-0.11.0}/scripts/run_a2a_tck.py +0 -0
@@ -1,7 +1,7 @@
1
1
  .PHONY: build release lint format test test_watch start start-inmem start-inmem-license-oss start start-js-server build-go-server start-go-server stop-go-server check-version check-base-imports test-a2a-tck test-a2a-tck-mandatory start-test-a2a-tck start-test-a2a-tck-mandatory start-test-a2a-tck-watch test-mcp-conformance start-test-mcp-conformance list-mcp-scenarios test-auth-read-only-assistant
2
2
 
3
3
  # Environment variables
4
- LANGSERVE_GRAPHS_ALL = '{"agent": {"path": "./tests/graphs/agent.py:graph", "description": "agent"}, "assistant_id_runtime": "./tests/graphs/assistant_id_runtime.py:graph", "custom_lifespan": "./tests/graphs/my_router.py:graph", "single_node": "./tests/graphs/single_node.py:graph", "benchmark": "./tests/graphs/benchmark.py:graph", "config_graph": "./tests/graphs/config_graph.py:graph", "other": "./tests/graphs/other.py:make_graph", "weather": "./tests/graphs/weather.py:mk_weather_graph", "searchy": "./tests/graphs/searchy.py:graph", "agent_simple": "./tests/graphs/agent_simple.py:graph", "simple_runtime": "./tests/graphs/simple_runtime.py:graph", "agent_interrupt": "./tests/graphs/agent_interrupt.py:graph", "agent_parallel_interrupt": "./tests/graphs/agent_parallel_interrupt.py:graph", "message_type_test": "./tests/graphs/message_type_test.py:graph", "remote_subgraph_parent": "./tests/graphs/remote_subgraph_parent.py:graph", "simple_remote": "./tests/graphs/simple_remote.py:graph", "nested_subgraphs": "./tests/graphs/nested_subgraphs.py:graph", "functional_fibonacci": "./tests/graphs/functional_fibonacci.py:fibonacci", "state_graph_fibonacci": "./tests/graphs/state_graph_fibonacci.py:fibonacci", "max_concurrency_graph": "./tests/graphs/max_concurrency_graph.py:graph", "unserializable_subgraph": "./tests/graphs/unserializable_subgraph.py:graph", "agent_interrupt_text": "./tests/graphs/agent_interrupt_text.py:graph", "agent_echo_stream": "./tests/graphs/agent_echo_stream.py:graph", "agent_tool_stream": "./tests/graphs/agent_tool_stream.py:graph", "runtime_graph": "./tests/graphs/runtime_graph.py:graph", "tool_call_chunk_stream": "./tests/graphs/tool_call_chunk_stream.py:graph", "ui_tool_call_stream": "./tests/graphs/ui_tool_call_stream.py:graph", "agent_metrics_stream": "./tests/graphs/agent_metrics_stream.py:graph", "agent_multimodal_stream": "./tests/graphs/agent_multimodal_stream.py:graph", "agent_bedtime_story": "./tests/graphs/agent_bedtime_story.py:graph", "delta_channel": "./tests/graphs/delta_channel.py:graph", "delta_channel_freq": "./tests/graphs/delta_channel_freq.py:graph", "delta_channel_files": "./tests/graphs/delta_channel_files.py:graph", "delta_channel_files_freq": "./tests/graphs/delta_channel_files_freq.py:graph", "delta_channel_legacy": "./tests/graphs/delta_channel_migration.py:graph_legacy", "delta_channel_delta": "./tests/graphs/delta_channel_migration.py:graph_delta", "delta_channel_messages_freq": "./tests/graphs/delta_channel_messages.py:graph_freq", "delta_channel_messages": "./tests/graphs/delta_channel_messages.py:graph", "delta_channel_messages_legacy": "./tests/graphs/delta_channel_messages.py:graph_legacy", "delta_channel_messages_remove": "./tests/graphs/delta_channel_messages.py:graph_remove", "delta_channel_messages_update": "./tests/graphs/delta_channel_messages.py:graph_update", "delta_channel_messages_delta": "./tests/graphs/delta_channel_messages.py:graph_delta"}'
4
+ LANGSERVE_GRAPHS_ALL = '{"agent": {"path": "./tests/graphs/agent.py:graph", "description": "agent"}, "assistant_id_runtime": "./tests/graphs/assistant_id_runtime.py:graph", "custom_lifespan": "./tests/graphs/my_router.py:graph", "single_node": "./tests/graphs/single_node.py:graph", "benchmark": "./tests/graphs/benchmark.py:graph", "config_graph": "./tests/graphs/config_graph.py:graph", "other": "./tests/graphs/other.py:make_graph", "weather": "./tests/graphs/weather.py:mk_weather_graph", "searchy": "./tests/graphs/searchy.py:graph", "agent_simple": "./tests/graphs/agent_simple.py:graph", "simple_runtime": "./tests/graphs/simple_runtime.py:graph", "agent_interrupt": "./tests/graphs/agent_interrupt.py:graph", "agent_parallel_interrupt": "./tests/graphs/agent_parallel_interrupt.py:graph", "message_type_test": "./tests/graphs/message_type_test.py:graph", "remote_subgraph_parent": "./tests/graphs/remote_subgraph_parent.py:graph", "simple_remote": "./tests/graphs/simple_remote.py:graph", "nested_subgraphs": "./tests/graphs/nested_subgraphs.py:graph", "functional_fibonacci": "./tests/graphs/functional_fibonacci.py:fibonacci", "state_graph_fibonacci": "./tests/graphs/state_graph_fibonacci.py:fibonacci", "max_concurrency_graph": "./tests/graphs/max_concurrency_graph.py:graph", "unserializable_subgraph": "./tests/graphs/unserializable_subgraph.py:graph", "agent_interrupt_text": "./tests/graphs/agent_interrupt_text.py:graph", "agent_echo_stream": "./tests/graphs/agent_echo_stream.py:graph", "agent_tool_stream": "./tests/graphs/agent_tool_stream.py:graph", "runtime_graph": "./tests/graphs/runtime_graph.py:graph", "tool_call_chunk_stream": "./tests/graphs/tool_call_chunk_stream.py:graph", "ui_tool_call_stream": "./tests/graphs/ui_tool_call_stream.py:graph", "agent_metrics_stream": "./tests/graphs/agent_metrics_stream.py:graph", "agent_multimodal_stream": "./tests/graphs/agent_multimodal_stream.py:graph", "agent_bedtime_story": "./tests/graphs/agent_bedtime_story.py:graph", "delta_channel": "./tests/graphs/delta_channel.py:graph", "delta_channel_freq": "./tests/graphs/delta_channel_freq.py:graph", "delta_channel_files": "./tests/graphs/delta_channel_files.py:graph", "delta_channel_files_freq": "./tests/graphs/delta_channel_files_freq.py:graph", "delta_channel_legacy": "./tests/graphs/delta_channel_migration.py:graph_legacy", "delta_channel_delta": "./tests/graphs/delta_channel_migration.py:graph_delta", "delta_channel_delta_filter": "./tests/graphs/delta_channel_migration.py:graph_delta_filter", "delta_channel_messages_freq": "./tests/graphs/delta_channel_messages.py:graph_freq", "delta_channel_messages": "./tests/graphs/delta_channel_messages.py:graph", "delta_channel_messages_legacy": "./tests/graphs/delta_channel_messages.py:graph_legacy", "delta_channel_messages_remove": "./tests/graphs/delta_channel_messages.py:graph_remove", "delta_channel_messages_update": "./tests/graphs/delta_channel_messages.py:graph_update", "delta_channel_messages_delta": "./tests/graphs/delta_channel_messages.py:graph_delta", "store_e2e_async": "./tests/graphs/store_e2e.py:graph_async", "store_e2e_sync": "./tests/graphs/store_e2e.py:graph_sync"}'
5
5
  LANGSERVE_GRAPHS_AUTH = '{"agent": {"path": "./tests/graphs/agent.py:graph", "description": "agent"}, "assistant_id_runtime": "./tests/graphs/assistant_id_runtime.py:graph", "config_graph": "./tests/graphs/config_graph.py:graph", "other": "./tests/graphs/other.py:make_graph", "weather": "./tests/graphs/weather.py:mk_weather_graph", "searchy": "./tests/graphs/searchy.py:graph", "agent_simple": "./tests/graphs/agent_simple.py:graph", "simple_runtime": "./tests/graphs/simple_runtime.py:graph", "agent_parallel_interrupt": "./tests/graphs/agent_parallel_interrupt.py:graph", "functional_fibonacci": "./tests/graphs/functional_fibonacci.py:fibonacci", "state_graph_fibonacci": "./tests/graphs/state_graph_fibonacci.py:fibonacci", "runtime_graph": "./tests/graphs/runtime_graph.py:graph"}'
6
6
 
7
7
  # Go server management
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.10.3
3
+ Version: 0.11.0
4
4
  Author-email: Will Fu-Hinthorn <will@langchain.dev>, Josh Rogers <josh@langchain.dev>, Parker Rule <parker@langchain.dev>
5
5
  License: Elastic-2.0
6
6
  License-File: LICENSE
@@ -14,20 +14,22 @@ Requires-Dist: httptools>=0.5.0; platform_system != 'Windows'
14
14
  Requires-Dist: httpx>=0.25.0
15
15
  Requires-Dist: jsonschema-rs<0.45,>=0.20.0
16
16
  Requires-Dist: langchain-core>=0.3.64
17
- Requires-Dist: langchain-protocol<0.1,>=0.0.16
17
+ Requires-Dist: langchain-protocol<0.1,>=0.0.18
18
18
  Requires-Dist: langgraph-checkpoint<5,>=3.0.1
19
- Requires-Dist: langgraph-runtime-inmem<0.31.0.dev0,>=0.30.0.dev0
19
+ Requires-Dist: langgraph-runtime-inmem<0.32.0.dev0,>=0.31.0.dev0
20
20
  Requires-Dist: langgraph-sdk>=0.3.5
21
21
  Requires-Dist: langgraph<2,>=0.4.10
22
22
  Requires-Dist: langsmith[otel]>=0.6.3
23
23
  Requires-Dist: opentelemetry-api>=0.0.1
24
24
  Requires-Dist: opentelemetry-exporter-otlp-proto-http>=0.0.1
25
+ Requires-Dist: opentelemetry-exporter-prometheus<0.59,>=0.58b0
25
26
  Requires-Dist: opentelemetry-sdk>=0.0.1
26
27
  Requires-Dist: orjson>=3.9.7
28
+ Requires-Dist: prometheus-client>=0.0.1
27
29
  Requires-Dist: protobuf<7.0.0,>=6.32.1
28
- Requires-Dist: pyjwt>=2.9.0
30
+ Requires-Dist: pyjwt>=2.13.0
29
31
  Requires-Dist: sse-starlette<3.4.0,>=2.1.3
30
- Requires-Dist: starlette>=1.0.1
32
+ Requires-Dist: starlette>=1.3.1
31
33
  Requires-Dist: structlog<26,>=24.1.0
32
34
  Requires-Dist: tenacity>=8.0.0
33
35
  Requires-Dist: truststore>=0.1
@@ -4,10 +4,10 @@ version = "0.1.0"
4
4
  description = "Continuous stress test for Agent Server"
5
5
  requires-python = ">=3.13"
6
6
  dependencies = [
7
- "langgraph-sdk>=0.3.13",
8
- "click>=8.3.3",
7
+ "langgraph-sdk>=0.3.15",
8
+ "click>=8.4.1",
9
9
  "structlog>=24.1.0",
10
- "datadog-api-client>=2.0.0",
10
+ "datadog-api-client>=2.55.0",
11
11
  "python-dateutil>=2.8.0",
12
12
  "httpx>=0.27.0",
13
13
  ]
@@ -25,14 +25,14 @@ wheels = [
25
25
 
26
26
  [[package]]
27
27
  name = "click"
28
- version = "8.3.3"
28
+ version = "8.4.1"
29
29
  source = { registry = "https://pypi.org/simple" }
30
30
  dependencies = [
31
31
  { name = "colorama", marker = "sys_platform == 'win32'" },
32
32
  ]
33
- sdist = { url = "https://files.pythonhosted.org/packages/bb/63/f9e1ea081ce35720d8b92acde70daaedace594dc93b693c869e0d5910718/click-8.3.3.tar.gz", hash = "sha256:398329ad4837b2ff7cbe1dd166a4c0f8900c3ca3a218de04466f38f6497f18a2", size = 328061, upload-time = "2026-04-22T15:11:27.506Z" }
33
+ sdist = { url = "https://files.pythonhosted.org/packages/9b/98/518d8e5081007684232226f475082b30087d0f585e8457db087298259f49/click-8.4.1.tar.gz", hash = "sha256:918b5633eddf6b41c32d4f454bf0de810065c74e3f7dbf8ee5452f8be88d3e96", size = 353007, upload-time = "2026-05-22T04:08:37.769Z" }
34
34
  wheels = [
35
- { url = "https://files.pythonhosted.org/packages/ae/44/c1221527f6a71a01ec6fbad7fa78f1d50dfa02217385cf0fa3eec7087d59/click-8.3.3-py3-none-any.whl", hash = "sha256:a2bf429bb3033c89fa4936ffb35d5cb471e3719e1f3c8a7c3fff0b8314305613", size = 110502, upload-time = "2026-04-22T15:11:25.044Z" },
35
+ { url = "https://files.pythonhosted.org/packages/c7/0d/67e5b4109ea4a837e80daa87c2c696711955e40449a97e8926672534def2/click-8.4.1-py3-none-any.whl", hash = "sha256:482be17c6991b8c19c5429a1e995d9b0efdbb63172824c41f99965dc0ade8ec2", size = 116639, upload-time = "2026-05-22T04:08:35.26Z" },
36
36
  ]
37
37
 
38
38
  [[package]]
@@ -46,7 +46,7 @@ wheels = [
46
46
 
47
47
  [[package]]
48
48
  name = "datadog-api-client"
49
- version = "2.53.0"
49
+ version = "2.55.0"
50
50
  source = { registry = "https://pypi.org/simple" }
51
51
  dependencies = [
52
52
  { name = "certifi" },
@@ -54,9 +54,9 @@ dependencies = [
54
54
  { name = "typing-extensions" },
55
55
  { name = "urllib3" },
56
56
  ]
57
- sdist = { url = "https://files.pythonhosted.org/packages/20/37/4f537b327906ff5fdf26531f2b3ec8994ffa41630d4bf1e130bb2cacb202/datadog_api_client-2.53.0.tar.gz", hash = "sha256:85e44f269d0a9757821a7af4ee35e324355a11ebe0efaabf6688efd9fa169d85", size = 4537088, upload-time = "2026-04-01T15:29:44.503Z" }
57
+ sdist = { url = "https://files.pythonhosted.org/packages/ee/8d/6f7ddd04cc701cc590eab111a45e54c92158eddbff943ad4a1dbb5925b21/datadog_api_client-2.55.0.tar.gz", hash = "sha256:c56767c867a15b928da08d5c6077a7ac466e029a10a5045e80d79d76e92afaa3", size = 4994403, upload-time = "2026-05-15T17:20:06.825Z" }
58
58
  wheels = [
59
- { url = "https://files.pythonhosted.org/packages/e9/a1/78ccb200fa3d037465cef14b0163005279757026429e76b5807e392dca1b/datadog_api_client-2.53.0-py3-none-any.whl", hash = "sha256:f965c10f846da03d3d1abe99f20331e42933c8736b7ee176f0a420ca019f1b17", size = 5925406, upload-time = "2026-04-01T15:29:41.128Z" },
59
+ { url = "https://files.pythonhosted.org/packages/c7/28/9af04e1cccb57bc9754a5d4cd2fc5a006183e95b234336e9115fe95e5f12/datadog_api_client-2.55.0-py3-none-any.whl", hash = "sha256:fef8dcadbdcd1f7fbe89d97825cfc06c9a1e3577b61f04834b8d250c881d59a7", size = 6644614, upload-time = "2026-05-15T17:20:03.927Z" },
60
60
  ]
61
61
 
62
62
  [[package]]
@@ -120,25 +120,25 @@ dependencies = [
120
120
 
121
121
  [package.metadata]
122
122
  requires-dist = [
123
- { name = "click", specifier = ">=8.3.3" },
124
- { name = "datadog-api-client", specifier = ">=2.0.0" },
123
+ { name = "click", specifier = ">=8.4.1" },
124
+ { name = "datadog-api-client", specifier = ">=2.55.0" },
125
125
  { name = "httpx", specifier = ">=0.27.0" },
126
- { name = "langgraph-sdk", specifier = ">=0.3.13" },
126
+ { name = "langgraph-sdk", specifier = ">=0.3.15" },
127
127
  { name = "python-dateutil", specifier = ">=2.8.0" },
128
128
  { name = "structlog", specifier = ">=24.1.0" },
129
129
  ]
130
130
 
131
131
  [[package]]
132
132
  name = "langgraph-sdk"
133
- version = "0.3.14"
133
+ version = "0.3.15"
134
134
  source = { registry = "https://pypi.org/simple" }
135
135
  dependencies = [
136
136
  { name = "httpx" },
137
137
  { name = "orjson" },
138
138
  ]
139
- sdist = { url = "https://files.pythonhosted.org/packages/02/f1/134046c20bc4a4a15d410d1d21c9e298a3e9923777b4cc867b8669bc636b/langgraph_sdk-0.3.14.tar.gz", hash = "sha256:acd1674c538e97f3cdaa610f6dd7e34bc9bad30167f0ccc482dcd563325e81f5", size = 198162, upload-time = "2026-05-05T18:40:03.524Z" }
139
+ sdist = { url = "https://files.pythonhosted.org/packages/66/af/cdd4d6f3c05b3c1112ed3f12ef830faf15951b21d22cbc622a4becbbe25c/langgraph_sdk-0.3.15.tar.gz", hash = "sha256:29e805003d2c6e296823dd71992610976fd0428cefaa8b3304fd91f2247037de", size = 201924, upload-time = "2026-05-22T16:54:27.678Z" }
140
140
  wheels = [
141
- { url = "https://files.pythonhosted.org/packages/34/96/1c9f9fbfe756ddd850a2585e7f1949d8ebb97fdaa7a5eff8f45ed1314670/langgraph_sdk-0.3.14-py3-none-any.whl", hash = "sha256:68935bf6f4924eda92617a9e5dfb4f4281197508c648cb9d62ff083907607f9d", size = 97028, upload-time = "2026-05-05T18:40:02.099Z" },
141
+ { url = "https://files.pythonhosted.org/packages/be/a5/0196d9c05749c25bc198e4909d68c998bc3120297e14944921baf2f4c384/langgraph_sdk-0.3.15-py3-none-any.whl", hash = "sha256:3838773acf7456d158165385d49f48f1e856f28b56ccd99ea139a8f27004815d", size = 98166, upload-time = "2026-05-22T16:54:26.013Z" },
142
142
  ]
143
143
 
144
144
  [[package]]
@@ -0,0 +1 @@
1
+ __version__ = "0.11.0"
@@ -24,6 +24,14 @@ from langgraph_grpc_common.checkpointer import GrpcCheckpointer
24
24
  from langgraph_api import config, timing
25
25
  from langgraph_api.asyncio import as_asynccontextmanager
26
26
  from langgraph_api.grpc.client import get_shared_client
27
+
28
+ # Used as the per-instance serializer for ``GrpcCheckpointer`` below so
29
+ # checkpoint payloads honour the same ``USE_PICKLE_FALLBACK`` /
30
+ # encryption / ``allowed_json_modules`` policy as the in-process Python
31
+ # ``Checkpointer``. Scoped to checkpointer RPCs only (via the contextvar
32
+ # in ``langgraph_grpc_common.serde``) so non-checkpointer gRPC ops keep
33
+ # using the safer ``JsonPlusSerializer`` default.
34
+ from langgraph_api.serde import Serializer as _ApiSerializer
27
35
  from langgraph_api.timing import profiled_import
28
36
  from langgraph_api.utils.config import run_in_executor
29
37
 
@@ -320,7 +328,24 @@ async def get_checkpointer(
320
328
  ):
321
329
  return cast(
322
330
  "FullCheckpointerProtocol",
323
- GrpcCheckpointer(get_stub=_get_shared_checkpointer_stub),
331
+ GrpcCheckpointer(
332
+ get_stub=_get_shared_checkpointer_stub,
333
+ serializer=_ApiSerializer(),
334
+ ),
335
+ )
336
+
337
+ from langgraph_api.feature_flags import ( # noqa: PLC0415
338
+ IS_POSTGRES_BACKEND,
339
+ PREFER_GRPC_CHECKPOINTER,
340
+ )
341
+
342
+ if IS_POSTGRES_BACKEND and PREFER_GRPC_CHECKPOINTER:
343
+ return cast(
344
+ "FullCheckpointerProtocol",
345
+ GrpcCheckpointer(
346
+ get_stub=_get_shared_checkpointer_stub,
347
+ serializer=_ApiSerializer(),
348
+ ),
324
349
  )
325
350
 
326
351
  from langgraph_runtime.checkpoint import Checkpointer # noqa: PLC0415
@@ -0,0 +1,123 @@
1
+ import langgraph.version
2
+ import structlog
3
+ from prometheus_client import CONTENT_TYPE_LATEST, generate_latest
4
+ from starlette.responses import JSONResponse, PlainTextResponse
5
+
6
+ from langgraph_api import __version__, config, metadata
7
+ from langgraph_api.feature_flags import IS_POSTGRES_OR_GRPC_BACKEND
8
+ from langgraph_api.http_metrics import HTTP_METRICS_COLLECTOR
9
+ from langgraph_api.route import ApiRequest
10
+ from langgraph_api.schema import PoolStats, PostgresPoolStats, RedisPoolStats
11
+ from langgraph_runtime.database import connect, pool_stats
12
+ from langgraph_runtime.metrics import get_metrics
13
+
14
+ if IS_POSTGRES_OR_GRPC_BACKEND:
15
+ from langgraph_api.grpc.ops import Runs
16
+ else:
17
+ from langgraph_runtime.ops import Runs
18
+
19
+ METRICS_FORMATS = {"prometheus", "json"}
20
+
21
+ logger = structlog.stdlib.get_logger(__name__)
22
+
23
+
24
+ def _merge_pool_stats(local: PoolStats, remote: PoolStats) -> PoolStats:
25
+ """Merge local and remote pool stats by summing numeric values. Used to aggregate Python + Go pool metrics."""
26
+ merged: PoolStats = {}
27
+ if "postgres" in local or "postgres" in remote:
28
+ lp = local.get("postgres") or {}
29
+ rp = remote.get("postgres") or {}
30
+ merged["postgres"] = PostgresPoolStats(
31
+ pool_max=lp.get("pool_max", 0) + rp.get("pool_max", 0),
32
+ pool_size=lp.get("pool_size", 0) + rp.get("pool_size", 0),
33
+ pool_available=lp.get("pool_available", 0) + rp.get("pool_available", 0),
34
+ requests_queued=lp.get("requests_queued", 0) + rp.get("requests_queued", 0),
35
+ requests_errors=lp.get("requests_errors", 0) + rp.get("requests_errors", 0),
36
+ )
37
+ if "redis" in local or "redis" in remote:
38
+ lr = local.get("redis") or {}
39
+ rr = remote.get("redis") or {}
40
+ merged["redis"] = RedisPoolStats(
41
+ idle_connections=lr.get("idle_connections", 0)
42
+ + rr.get("idle_connections", 0),
43
+ in_use_connections=lr.get("in_use_connections", 0)
44
+ + rr.get("in_use_connections", 0),
45
+ max_connections=lr.get("max_connections", 0) + rr.get("max_connections", 0),
46
+ )
47
+ return merged
48
+
49
+
50
+ async def _grpc_pool_stats() -> PoolStats:
51
+ """Fetch connection pool stats from the Core API (Go) via gRPC for metrics aggregation. Returns {} on error."""
52
+ if not IS_POSTGRES_OR_GRPC_BACKEND:
53
+ return {}
54
+ try:
55
+ return await Runs.pool_stats()
56
+ except Exception as e:
57
+ await logger.awarning(
58
+ "Failed to fetch Core API pool stats for aggregation", exc_info=e
59
+ )
60
+ return {}
61
+
62
+
63
+ async def meta_pool_stats() -> PoolStats:
64
+ local_pool_stats: PoolStats = pool_stats()
65
+
66
+ # Aggregate with Core API (Go) pool stats when using gRPC backend
67
+ grpc_pool_stats = await _grpc_pool_stats()
68
+ return _merge_pool_stats(local_pool_stats, grpc_pool_stats)
69
+
70
+
71
+ async def meta_info(request: ApiRequest):
72
+ return JSONResponse(
73
+ {
74
+ "version": __version__,
75
+ "langgraph_py_version": langgraph.version.__version__,
76
+ "flags": {
77
+ "assistants": True,
78
+ "crons": True,
79
+ "langsmith": bool(config.LANGSMITH_CONTROL_PLANE_API_KEY)
80
+ and bool(config.TRACING),
81
+ "langsmith_tracing_replicas": True,
82
+ "langsmith_tracing_session_on_runs": True,
83
+ },
84
+ "host": {
85
+ "kind": metadata.HOST,
86
+ "project_id": metadata.PROJECT_ID,
87
+ "host_revision_id": metadata.HOST_REVISION_ID,
88
+ "revision_id": metadata.REVISION,
89
+ "tenant_id": metadata.TENANT_ID,
90
+ },
91
+ }
92
+ )
93
+
94
+
95
+ async def meta_metrics(request: ApiRequest):
96
+ # determine output format
97
+ metrics_format = request.query_params.get("format", "prometheus")
98
+ if metrics_format not in METRICS_FORMATS:
99
+ metrics_format = "prometheus"
100
+
101
+ if metrics_format == "prometheus":
102
+ # Served straight from the OTLP Prometheus client's registry (see
103
+ # metrics_otlp._LSDPrometheusReader).
104
+ return PlainTextResponse(generate_latest(), media_type=CONTENT_TYPE_LATEST)
105
+
106
+ # JSON: hand-built snapshot of workers, queue depth, HTTP, and pool stats.
107
+ worker_metrics = get_metrics()["workers"]
108
+ http_metrics = HTTP_METRICS_COLLECTOR.get_metrics(
109
+ metadata.PROJECT_ID,
110
+ metadata.HOST_REVISION_ID,
111
+ metrics_format,
112
+ metadata.DEPLOYMENT_TYPE,
113
+ )
114
+ merged_pool_stats = await meta_pool_stats()
115
+ async with connect() as conn:
116
+ resp = {
117
+ **merged_pool_stats,
118
+ "queue": await Runs.stats(conn),
119
+ **http_metrics,
120
+ }
121
+ if config.N_JOBS_PER_WORKER > 0:
122
+ resp["workers"] = worker_metrics
123
+ return JSONResponse(resp)
@@ -787,7 +787,9 @@ async def create_cron(request: ApiRequest):
787
787
 
788
788
  enabled = payload.get("enabled", True)
789
789
 
790
- async with connect(supports_core_api=False) as conn:
790
+ # gRPC/postgres Crons route through core-api and ignore ``conn`` (the default
791
+ # ``connect()`` yields None there); inmem uses the yielded connection.
792
+ async with connect() as conn:
791
793
  cron = await Crons.put(
792
794
  conn,
793
795
  thread_id=None,
@@ -834,7 +836,7 @@ async def create_thread_cron(request: ApiRequest):
834
836
  CRON_PAYLOAD_ENCRYPTION_SUBFIELDS,
835
837
  )
836
838
 
837
- async with connect(supports_core_api=False) as conn:
839
+ async with connect() as conn:
838
840
  cron = await Crons.put(
839
841
  conn,
840
842
  thread_id=thread_id,
@@ -890,7 +892,7 @@ async def patch_cron(request: ApiRequest):
890
892
  CRON_PAYLOAD_ENCRYPTION_SUBFIELDS,
891
893
  )
892
894
 
893
- async with connect(supports_core_api=False) as conn:
895
+ async with connect() as conn:
894
896
  cron = await Crons.update(
895
897
  conn,
896
898
  cron_id=cron_id,
@@ -917,7 +919,7 @@ async def delete_cron(request: ApiRequest):
917
919
  validate_uuid(cron_id, "Invalid cron ID: must be a UUID")
918
920
 
919
921
  try:
920
- async with connect(supports_core_api=False) as conn:
922
+ async with connect() as conn:
921
923
  cid = await Crons.delete(
922
924
  conn,
923
925
  cron_id=cron_id,
@@ -940,7 +942,7 @@ async def search_crons(request: ApiRequest):
940
942
  validate_uuid(thread_id, "Invalid thread ID: must be a UUID")
941
943
 
942
944
  offset = int(payload.get("offset", 0))
943
- async with connect(supports_core_api=False) as conn:
945
+ async with connect() as conn:
944
946
  crons_iter, next_offset = await Crons.search(
945
947
  conn,
946
948
  assistant_id=assistant_id,
@@ -972,7 +974,7 @@ async def count_crons(request: ApiRequest):
972
974
  if thread_id := payload.get("thread_id"):
973
975
  validate_uuid(thread_id, "Invalid thread ID: must be a UUID")
974
976
 
975
- async with connect(supports_core_api=False) as conn:
977
+ async with connect() as conn:
976
978
  count = await Crons.count(
977
979
  conn,
978
980
  assistant_id=assistant_id,
@@ -13,7 +13,10 @@ from langgraph_api.encryption.shared import (
13
13
  using_aes_encryption,
14
14
  using_custom_encryption,
15
15
  )
16
- from langgraph_api.feature_flags import IS_POSTGRES_OR_GRPC_BACKEND
16
+ from langgraph_api.feature_flags import (
17
+ IS_POSTGRES_OR_GRPC_BACKEND,
18
+ PREFER_GRPC_CHECKPOINTER,
19
+ )
17
20
  from langgraph_api.route import ApiRequest, ApiResponse, ApiRoute
18
21
  from langgraph_api.schema import (
19
22
  THREAD_ENCRYPTION_FIELDS,
@@ -82,7 +85,7 @@ async def create_thread(
82
85
  )
83
86
  else:
84
87
  # Need connection for inmem put or gRPC State.bulk
85
- async with connect(supports_core_api=False) as conn:
88
+ async with connect(supports_core_api=PREFER_GRPC_CHECKPOINTER) as conn:
86
89
  iter = await Threads.put(
87
90
  conn,
88
91
  thread_id,
@@ -226,7 +229,7 @@ async def get_thread_state(
226
229
  thread_id = request.path_params["thread_id"]
227
230
  validate_uuid(thread_id, "Invalid thread ID: must be a UUID")
228
231
  subgraphs = request.query_params.get("subgraphs") in ("true", "True")
229
- async with connect(supports_core_api=False) as conn:
232
+ async with connect(supports_core_api=PREFER_GRPC_CHECKPOINTER) as conn:
230
233
  config = {
231
234
  "configurable": {
232
235
  **get_configurable_headers(request.headers),
@@ -247,7 +250,7 @@ async def get_thread_state_at_checkpoint(
247
250
  thread_id = request.path_params["thread_id"]
248
251
  validate_uuid(thread_id, "Invalid thread ID: must be a UUID")
249
252
  checkpoint_id = request.path_params["checkpoint_id"]
250
- async with connect(supports_core_api=False) as conn:
253
+ async with connect(supports_core_api=PREFER_GRPC_CHECKPOINTER) as conn:
251
254
  config = {
252
255
  "configurable": {
253
256
  **get_configurable_headers(request.headers),
@@ -273,7 +276,7 @@ async def get_thread_state_at_checkpoint_post(
273
276
  thread_id = request.path_params["thread_id"]
274
277
  validate_uuid(thread_id, "Invalid thread ID: must be a UUID")
275
278
  payload = await request.json(ThreadStateCheckpointRequest)
276
- async with connect(supports_core_api=False) as conn:
279
+ async with connect(supports_core_api=PREFER_GRPC_CHECKPOINTER) as conn:
277
280
  config = {
278
281
  "configurable": {
279
282
  **payload["checkpoint"],
@@ -311,7 +314,7 @@ async def update_thread_state(
311
314
  pass
312
315
  config["configurable"].update(get_configurable_headers(request.headers))
313
316
  config["configurable"]["thread_id"] = thread_id
314
- async with connect(supports_core_api=False) as conn:
317
+ async with connect(supports_core_api=PREFER_GRPC_CHECKPOINTER) as conn:
315
318
  inserted = await Threads.State.post(
316
319
  conn,
317
320
  config,
@@ -341,7 +344,7 @@ async def get_thread_history(
341
344
  **get_configurable_headers(request.headers),
342
345
  }
343
346
  }
344
- async with connect(supports_core_api=False) as conn:
347
+ async with connect(supports_core_api=PREFER_GRPC_CHECKPOINTER) as conn:
345
348
  states = [
346
349
  state_snapshot_to_thread_state(c)
347
350
  for c in await Threads.State.list(
@@ -363,7 +366,7 @@ async def get_thread_history_post(
363
366
  config["configurable"].update(payload.get("checkpoint", {}))
364
367
  config["configurable"].update(get_configurable_headers(request.headers))
365
368
  config["configurable"]["thread_id"] = thread_id
366
- async with connect(supports_core_api=False) as conn:
369
+ async with connect(supports_core_api=PREFER_GRPC_CHECKPOINTER) as conn:
367
370
  states = [
368
371
  state_snapshot_to_thread_state(c)
369
372
  for c in await Threads.State.list(
@@ -109,7 +109,12 @@ def _find_open_port(host: str) -> int:
109
109
 
110
110
 
111
111
  def _resolve_server_url(
112
- host: str, port: int, *, mount_prefix: str | None, tunnel: bool
112
+ host: str,
113
+ port: int,
114
+ *,
115
+ mount_prefix: str | None,
116
+ tunnel: bool,
117
+ is_ssl: bool,
113
118
  ) -> str:
114
119
  """Return the public-facing base URL for the server.
115
120
 
@@ -119,11 +124,15 @@ def _resolve_server_url(
119
124
  """
120
125
  from langgraph_api.utils.network import format_hostport # noqa: PLC0415
121
126
 
122
- upstream_url = f"http://{format_hostport(host, port)}"
127
+ upstream_url = (
128
+ f"http://{format_hostport(host, port)}"
129
+ if not is_ssl
130
+ else f"https://{format_hostport(host, port)}"
131
+ )
123
132
  if mount_prefix:
124
133
  upstream_url += mount_prefix
125
134
 
126
- if not tunnel:
135
+ if not tunnel or is_ssl:
127
136
  return upstream_url
128
137
 
129
138
  logger.info("Starting Cloudflare Tunnel...")
@@ -185,6 +194,8 @@ def run_server(
185
194
  allow_blocking: bool = False,
186
195
  runtime_edition: Literal["inmem", "community", "postgres"] = "inmem",
187
196
  server_level: str = "WARNING",
197
+ ssl_certfile: str | pathlib.Path | None = None,
198
+ ssl_keyfile: str | pathlib.Path | None = None,
188
199
  __redis_uri__: str | None = "fake",
189
200
  __database_uri__: str | None = ":memory:",
190
201
  __migrations_path__: str | None = "__inmem",
@@ -282,8 +293,13 @@ def run_server(
282
293
  to_patch[k] = v
283
294
 
284
295
  with patch_environment(**to_patch):
296
+ is_ssl = ssl_certfile is not None and ssl_keyfile is not None
285
297
  local_url = _resolve_server_url(
286
- host, port, mount_prefix=mount_prefix, tunnel=tunnel
298
+ host,
299
+ port,
300
+ mount_prefix=mount_prefix,
301
+ tunnel=tunnel,
302
+ is_ssl=is_ssl,
287
303
  )
288
304
  os.environ["LANGGRAPH_API_URL"] = local_url
289
305
 
@@ -292,6 +308,7 @@ def run_server(
292
308
 
293
309
  def _open_browser():
294
310
  nonlocal studio_origin, full_studio_url
311
+ import ssl # noqa: PLC0415
295
312
  import webbrowser # noqa: PLC0415
296
313
 
297
314
  thread_logger = logging.getLogger("browser_opener")
@@ -302,10 +319,17 @@ def run_server(
302
319
 
303
320
  with ThreadPoolExecutor(max_workers=1) as executor:
304
321
  org_id_future = executor.submit(_get_org_id)
322
+ context = (
323
+ ssl._create_unverified_context()
324
+ if ssl_certfile and ssl_keyfile
325
+ else None
326
+ )
305
327
 
306
328
  while True:
307
329
  try:
308
- with urllib.request.urlopen(f"{local_url}/ok") as response:
330
+ with urllib.request.urlopen(
331
+ f"{local_url}/ok", context=context
332
+ ) as response:
309
333
  if response.status == 200:
310
334
  try:
311
335
  org_id = org_id_future.result(timeout=3.0)
@@ -373,6 +397,8 @@ For production use, please use LangSmith Deployment.
373
397
  access_log=False,
374
398
  reload_includes=list(reload_includes) if reload_includes else None,
375
399
  reload_excludes=list(reload_excludes) if reload_excludes else None,
400
+ ssl_certfile=ssl_certfile,
401
+ ssl_keyfile=ssl_keyfile,
376
402
  log_config={
377
403
  "version": 1,
378
404
  "incremental": False,
@@ -4,7 +4,7 @@ from typing import TYPE_CHECKING, Annotated, Literal, TypeVar, cast
4
4
 
5
5
  import structlog
6
6
  from pydantic.functional_validators import AfterValidator
7
- from starlette.config import Config, undefined
7
+ from starlette.config import Config
8
8
  from starlette.datastructures import CommaSeparatedStrings
9
9
 
10
10
  from langgraph_api import traceblock
@@ -41,7 +41,14 @@ STATS_INTERVAL_SECS = env("STATS_INTERVAL_SECS", cast=int, default=60)
41
41
  # storage
42
42
 
43
43
  # Not in public docs: infrastructure, set by platform
44
- DATABASE_URI = env("DATABASE_URI", cast=str, default=getenv("POSTGRES_URI", undefined))
44
+ # Optional: persistence can go through the Go core over gRPC, so the Python
45
+ # runtime can start without a direct DB connection string. When unset, the
46
+ # Postgres runtime skips creating a psycopg pool (see database._startup_needs /
47
+ # database.start_pool). Callers that still require a direct connection fail
48
+ # loudly via connect()'s "Postgres pool not initialized" guard.
49
+ DATABASE_URI: str | None = env(
50
+ "DATABASE_URI", cast=str, default=getenv("POSTGRES_URI", None)
51
+ )
45
52
  # Not in public docs: infrastructure, set by platform
46
53
  MIGRATIONS_PATH = env("MIGRATIONS_PATH", cast=str, default="/storage/migrations")
47
54
  POSTGRES_POOL_MAX_SIZE = env("LANGGRAPH_POSTGRES_POOL_MAX_SIZE", cast=int, default=150)
@@ -243,6 +250,12 @@ WEBHOOKS_ENABLED = HTTP_CONFIG and HTTP_CONFIG.get("disable_webhooks")
243
250
  STORE_CONFIG = env(
244
251
  "LANGGRAPH_STORE", cast=_parse.parse_schema(StoreConfig), default=None
245
252
  )
253
+ LANGGRAPH_STORE_BACKEND = env("LANGGRAPH_STORE_BACKEND", cast=str, default="python")
254
+ USE_GRPC_STORE = LANGGRAPH_STORE_BACKEND == "grpc"
255
+
256
+ # When true, the Go core-server owns Postgres schema setup (DB migrations +
257
+ # vector index)
258
+ DB_MIGRATION_BY_CORE_API = env("DB_MIGRATION_BY_CORE_API", cast=bool, default=False)
246
259
 
247
260
 
248
261
  def _validate_mount_prefix(mount_prefix: str | None) -> str | None:
@@ -320,7 +333,6 @@ if (
320
333
  # queue
321
334
 
322
335
  BG_JOB_HEARTBEAT = 120 # seconds
323
- BG_JOB_INTERVAL = 30 # seconds
324
336
  BG_JOB_MAX_RETRIES = env("BG_JOB_MAX_RETRIES", cast=int, default=3)
325
337
  BG_JOB_ISOLATED_LOOPS = env("BG_JOB_ISOLATED_LOOPS", cast=bool, default=False)
326
338
  BG_JOB_SHUTDOWN_GRACE_PERIOD_SECS = env(
@@ -578,6 +590,13 @@ METRIC_MAX_EMITTING_TIER = env(
578
590
  "METRIC_MAX_EMITTING_TIER", cast=int, default=_METRIC_MAX_EMITTING_TIER_DEFAULT
579
591
  )
580
592
  DATADOG_METRICS_ENABLED = bool(LSD_DD_API_KEY)
593
+ # When true, the Prometheus scrape (/metrics) exposes ALL metrics, not just the
594
+ # lsd_web_metric (Deployment-UI) set. Record-time tier filtering
595
+ # (METRIC_MAX_EMITTING_TIER) still applies, so internal metrics must be within the
596
+ # max emitting tier to be recorded at all.
597
+ EXPOSE_INTERNAL_METRICS_PROMETHEUS = env(
598
+ "EXPOSE_INTERNAL_METRICS_PROMETHEUS", cast=bool, default=False
599
+ )
581
600
  LANGGRAPH_LOGS_ENDPOINT = env("LANGGRAPH_LOGS_ENDPOINT", cast=str, default=None)
582
601
  LANGGRAPH_LOGS_ENABLED = env("LANGGRAPH_LOGS_ENABLED", cast=bool, default=False)
583
602
 
@@ -620,7 +639,6 @@ __all__ = [
620
639
  "ALLOW_PRIVATE_NETWORK",
621
640
  "API_VARIANT",
622
641
  "BG_JOB_HEARTBEAT",
623
- "BG_JOB_INTERVAL",
624
642
  "BG_JOB_ISOLATED_LOOPS",
625
643
  "BG_JOB_MAX_RETRIES",
626
644
  "BG_JOB_SHUTDOWN_GRACE_PERIOD_SECS",
@@ -635,6 +653,8 @@ __all__ = [
635
653
  "CRON_SCHEDULER_SLEEP_TIME",
636
654
  "DATABASE_URI",
637
655
  "DATADOG_METRICS_ENABLED",
656
+ "DB_MIGRATION_BY_CORE_API",
657
+ "EXPOSE_INTERNAL_METRICS_PROMETHEUS",
638
658
  "FF_CRONS_ENABLED",
639
659
  "FF_LOG_DROPPED_EVENTS",
640
660
  "FF_LOG_QUERY_AND_PARAMS",
@@ -662,6 +682,7 @@ __all__ = [
662
682
  "LANGGRAPH_METRICS_ENDPOINT",
663
683
  "LANGGRAPH_METRICS_EXPORT_INTERVAL_MS",
664
684
  "LANGGRAPH_POSTGRES_EXTENSIONS",
685
+ "LANGGRAPH_STORE_BACKEND",
665
686
  "LANGSMITH_API_KEY",
666
687
  "LANGSMITH_AUTH_ENDPOINT",
667
688
  "LANGSMITH_AUTH_VERIFY_TENANT_ID",
@@ -709,6 +730,7 @@ __all__ = [
709
730
  "USES_STORE_TTL",
710
731
  "USES_THREAD_TTL",
711
732
  "USE_CUSTOM_CHECKPOINTER",
733
+ "USE_GRPC_STORE",
712
734
  "AuthConfig",
713
735
  "CheckpointerConfig",
714
736
  "CorsConfig",