langgraph-api 0.8.4__tar.gz → 0.8.5__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 (298) hide show
  1. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/Makefile +0 -1
  2. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/PKG-INFO +1 -1
  3. langgraph_api-0.8.5/langgraph_api/__init__.py +1 -0
  4. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/cli.py +33 -57
  5. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/queue_entrypoint.py +1 -4
  6. langgraph_api-0.8.5/langgraph_grpc_common/conversion/__init__.py +15 -0
  7. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/conversion/value.py +1 -17
  8. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/__init__.py +0 -8
  9. langgraph_api-0.8.4/langgraph_api/__init__.py +0 -1
  10. langgraph_api-0.8.4/langgraph_api/executor_entrypoint.py +0 -31
  11. langgraph_api-0.8.4/langgraph_grpc_common/conversion/__init__.py +0 -33
  12. langgraph_api-0.8.4/langgraph_grpc_common/conversion/channel.py +0 -159
  13. langgraph_api-0.8.4/langgraph_grpc_common/conversion/exception.py +0 -95
  14. langgraph_api-0.8.4/langgraph_grpc_common/conversion/graph.py +0 -154
  15. langgraph_api-0.8.4/langgraph_grpc_common/conversion/interrupt.py +0 -34
  16. langgraph_api-0.8.4/langgraph_grpc_common/conversion/messages.py +0 -405
  17. langgraph_api-0.8.4/langgraph_grpc_common/conversion/orchestrator_response.py +0 -418
  18. langgraph_api-0.8.4/langgraph_grpc_common/conversion/runopts.py +0 -95
  19. langgraph_api-0.8.4/langgraph_grpc_common/conversion/stream_mode.py +0 -55
  20. langgraph_api-0.8.4/langgraph_grpc_common/conversion/task.py +0 -349
  21. langgraph_api-0.8.4/langgraph_grpc_common/proto/engine_api_pb2.py +0 -88
  22. langgraph_api-0.8.4/langgraph_grpc_common/proto/engine_api_pb2.pyi +0 -818
  23. langgraph_api-0.8.4/langgraph_grpc_common/proto/engine_api_pb2_grpc.py +0 -375
  24. langgraph_api-0.8.4/langgraph_grpc_common/proto/engine_api_pb2_grpc.pyi +0 -175
  25. langgraph_api-0.8.4/langgraph_grpc_common/proto/executor_api_pb2.py +0 -114
  26. langgraph_api-0.8.4/langgraph_grpc_common/proto/executor_api_pb2.pyi +0 -930
  27. langgraph_api-0.8.4/langgraph_grpc_common/proto/executor_api_pb2_grpc.py +0 -278
  28. langgraph_api-0.8.4/langgraph_grpc_common/proto/executor_api_pb2_grpc.pyi +0 -107
  29. langgraph_api-0.8.4/langgraph_grpc_common/sanitize.py +0 -15
  30. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/.gitignore +0 -0
  31. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/LICENSE +0 -0
  32. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/README.md +0 -0
  33. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/.gitignore +0 -0
  34. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/Makefile +0 -0
  35. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/README.md +0 -0
  36. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/assistant.ts +0 -0
  37. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/benchmark-runner.ts +0 -0
  38. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/benchmark_profiles.ts +0 -0
  39. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/benchmarks.ts +0 -0
  40. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/cancel_first_second_completes.ts +0 -0
  41. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/enqueued_runs_order.ts +0 -0
  42. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/log-failure.ts +0 -0
  43. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/meta_workload.ts +0 -0
  44. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/stream_write.ts +0 -0
  45. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/thread.ts +0 -0
  46. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/thread_runs_metadata_search.ts +0 -0
  47. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/threads_search_metadata.ts +0 -0
  48. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/types.ts +0 -0
  49. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/wait_write.ts +0 -0
  50. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/capacity_dd_report.py +0 -0
  51. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/capacity_k6.js +0 -0
  52. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/capacity_runner.mjs +0 -0
  53. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/capacity_slack_report.py +0 -0
  54. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/capacity_urls.mjs +0 -0
  55. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/clean-cli.js +0 -0
  56. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/clean.js +0 -0
  57. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/continuous/README.md +0 -0
  58. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/continuous/pyproject.toml +0 -0
  59. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/continuous/runner.py +0 -0
  60. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/continuous/uv.lock +0 -0
  61. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/graphs.js +0 -0
  62. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/mixed_workload_k6.js +0 -0
  63. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/mixed_workload_runner.mjs +0 -0
  64. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/package.json +0 -0
  65. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/ramp.js +0 -0
  66. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/reporting/dd_reporting.py +0 -0
  67. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/reporting/slack_slowest_runs.py +0 -0
  68. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/reporting/slack_summary.py +0 -0
  69. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/run_local.sh +0 -0
  70. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/staircase.py +0 -0
  71. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/staircase_step_k6.js +0 -0
  72. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/tsconfig.json +0 -0
  73. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/update-revision.js +0 -0
  74. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/weather.js +0 -0
  75. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/constraints.txt +0 -0
  76. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/custom_store.sql +0 -0
  77. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/forbidden.txt +0 -0
  78. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/hatch_build.py +0 -0
  79. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/healthcheck.py +0 -0
  80. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph-cloud-debugging-20260210132856.zip +0 -0
  81. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/_checkpointer/__init__.py +0 -0
  82. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/_checkpointer/_adapter.py +0 -0
  83. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/_checkpointer/protocol.py +0 -0
  84. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/_factory_utils.py +0 -0
  85. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/__init__.py +0 -0
  86. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/a2a.py +0 -0
  87. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/assistants.py +0 -0
  88. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/mcp/__init__.py +0 -0
  89. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/mcp/_constants.py +0 -0
  90. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/mcp/_handlers.py +0 -0
  91. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/mcp/_models.py +0 -0
  92. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/mcp/_routes.py +0 -0
  93. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/mcp/_sanitizers.py +0 -0
  94. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/meta.py +0 -0
  95. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/openapi.py +0 -0
  96. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/profile.py +0 -0
  97. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/runs.py +0 -0
  98. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/store.py +0 -0
  99. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/threads.py +0 -0
  100. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/ui.py +0 -0
  101. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/asgi_transport.py +0 -0
  102. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/asyncio.py +0 -0
  103. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/auth/__init__.py +0 -0
  104. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/auth/custom.py +0 -0
  105. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/auth/errors.py +0 -0
  106. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/auth/langsmith/__init__.py +0 -0
  107. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/auth/langsmith/backend.py +0 -0
  108. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/auth/langsmith/client.py +0 -0
  109. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/auth/middleware.py +0 -0
  110. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/auth/noop.py +0 -0
  111. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/auth/studio_user.py +0 -0
  112. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/cache.py +0 -0
  113. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/command.py +0 -0
  114. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/config/__init__.py +0 -0
  115. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/config/_parse.py +0 -0
  116. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/config/schemas.py +0 -0
  117. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/cron_scheduler.py +0 -0
  118. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/encryption/__init__.py +0 -0
  119. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/encryption/aes_json.py +0 -0
  120. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/encryption/context.py +0 -0
  121. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/encryption/custom.py +0 -0
  122. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/encryption/middleware.py +0 -0
  123. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/encryption/shared.py +0 -0
  124. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/errors.py +0 -0
  125. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/feature_flags.py +0 -0
  126. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/graph.py +0 -0
  127. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/__init__.py +0 -0
  128. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/client.py +0 -0
  129. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
  130. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/ops/__init__.py +0 -0
  131. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/ops/assistants.py +0 -0
  132. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/ops/cache.py +0 -0
  133. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/ops/crons.py +0 -0
  134. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/ops/runs.py +0 -0
  135. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/ops/threads.py +0 -0
  136. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/server.py +0 -0
  137. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/servicers/__init__.py +0 -0
  138. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/servicers/checkpointer.py +0 -0
  139. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/servicers/encryption.py +0 -0
  140. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/http.py +0 -0
  141. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/http_metrics.py +0 -0
  142. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/http_metrics_utils.py +0 -0
  143. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/.gitignore +0 -0
  144. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/.prettierrc +0 -0
  145. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/__init__.py +0 -0
  146. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/base.py +0 -0
  147. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/build.mts +0 -0
  148. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/client.http.mts +0 -0
  149. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/client.mts +0 -0
  150. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/errors.py +0 -0
  151. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/global.d.ts +0 -0
  152. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/package.json +0 -0
  153. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/remote.py +0 -0
  154. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/schema.py +0 -0
  155. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/src/graph.mts +0 -0
  156. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/src/load.hooks.mjs +0 -0
  157. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/src/preload.mjs +0 -0
  158. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/src/utils/files.mts +0 -0
  159. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/src/utils/importMap.mts +0 -0
  160. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
  161. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/src/utils/serde.mts +0 -0
  162. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/sse.py +0 -0
  163. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/traceblock.mts +0 -0
  164. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/tsconfig.json +0 -0
  165. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/ui.py +0 -0
  166. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/yarn.lock +0 -0
  167. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/lc_security/__init__.py +0 -0
  168. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/lc_security/exceptions.py +0 -0
  169. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/lc_security/policy.py +0 -0
  170. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/lc_security/transport.py +0 -0
  171. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/logging.py +0 -0
  172. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/metadata.py +0 -0
  173. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/metrics_datadog.py +0 -0
  174. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/middleware/__init__.py +0 -0
  175. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/middleware/ensure_store.py +0 -0
  176. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/middleware/http_logger.py +0 -0
  177. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/middleware/private_network.py +0 -0
  178. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/middleware/request_id.py +0 -0
  179. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/models/__init__.py +0 -0
  180. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/models/run.py +0 -0
  181. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/otel_context.py +0 -0
  182. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/patch.py +0 -0
  183. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/route.py +0 -0
  184. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/schema.py +0 -0
  185. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/self_hosted_logs.py +0 -0
  186. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/self_hosted_metrics.py +0 -0
  187. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/serde.py +0 -0
  188. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/server.py +0 -0
  189. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/sse.py +0 -0
  190. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/state.py +0 -0
  191. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/store.py +0 -0
  192. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/stream.py +0 -0
  193. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/timing/__init__.py +0 -0
  194. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/timing/profiler.py +0 -0
  195. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/timing/timer.py +0 -0
  196. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/traceblock.py +0 -0
  197. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/tunneling/cloudflare.py +0 -0
  198. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/utils/__init__.py +0 -0
  199. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/utils/cache.py +0 -0
  200. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/utils/config.py +0 -0
  201. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/utils/errors.py +0 -0
  202. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/utils/extract.py +0 -0
  203. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/utils/future.py +0 -0
  204. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/utils/headers.py +0 -0
  205. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/utils/network.py +0 -0
  206. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/utils/retriable_client.py +0 -0
  207. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/utils/stream_codec.py +0 -0
  208. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/utils/uuids.py +0 -0
  209. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/validation.py +0 -0
  210. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/webhook.py +0 -0
  211. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/worker.py +0 -0
  212. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/__init__.py +0 -0
  213. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/checkpointer.py +0 -0
  214. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/conversion/_compat.py +0 -0
  215. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/conversion/checkpoint.py +0 -0
  216. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/conversion/config.py +0 -0
  217. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/conversion/durability.py +0 -0
  218. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/conversion/struct.py +0 -0
  219. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/checkpointer_pb2.py +0 -0
  220. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +0 -0
  221. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +0 -0
  222. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +0 -0
  223. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/core_api_pb2.py +0 -0
  224. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/core_api_pb2.pyi +0 -0
  225. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +0 -0
  226. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
  227. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
  228. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/encryption_pb2.pyi +0 -0
  229. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +0 -0
  230. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
  231. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
  232. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/engine_common_pb2.pyi +0 -0
  233. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +0 -0
  234. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
  235. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
  236. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
  237. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.py +0 -0
  238. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.pyi +0 -0
  239. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
  240. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
  241. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +0 -0
  242. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
  243. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.py +0 -0
  244. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.pyi +0 -0
  245. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.py +0 -0
  246. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.pyi +0 -0
  247. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
  248. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
  249. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +0 -0
  250. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
  251. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
  252. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
  253. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +0 -0
  254. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
  255. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
  256. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
  257. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +0 -0
  258. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
  259. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2.py +0 -0
  260. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2.pyi +0 -0
  261. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2_grpc.py +0 -0
  262. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2_grpc.pyi +0 -0
  263. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +0 -0
  264. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +0 -0
  265. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +0 -0
  266. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
  267. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
  268. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
  269. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +0 -0
  270. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
  271. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
  272. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
  273. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.py +0 -0
  274. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.pyi +0 -0
  275. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
  276. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
  277. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/errors_pb2_grpc.py +0 -0
  278. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
  279. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/serde.py +0 -0
  280. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_license/__init__.py +0 -0
  281. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_license/validation.py +0 -0
  282. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_runtime/__init__.py +0 -0
  283. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_runtime/checkpoint.py +0 -0
  284. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_runtime/database.py +0 -0
  285. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_runtime/lifespan.py +0 -0
  286. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_runtime/metrics.py +0 -0
  287. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_runtime/ops.py +0 -0
  288. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_runtime/queue.py +0 -0
  289. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_runtime/retry.py +0 -0
  290. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_runtime/routes.py +0 -0
  291. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_runtime/store.py +0 -0
  292. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/logging.json +0 -0
  293. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/openapi.json +0 -0
  294. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/pyproject.toml +0 -0
  295. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/scripts/build_wheel.py +0 -0
  296. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/scripts/create_license.py +0 -0
  297. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/scripts/run_a2a_tck.py +0 -0
  298. {langgraph_api-0.8.4 → langgraph_api-0.8.5}/uv.lock +0 -0
@@ -16,7 +16,6 @@ start-go-server: # NOTE: core server will start with sqlite if no DATABASE_URI i
16
16
  DATABASE_URI= \
17
17
  REDIS_URI= \
18
18
  ./bin/core-server \
19
- -service core-api \
20
19
  -apply-db-schema &
21
20
  @sleep 2
22
21
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.8.4
3
+ Version: 0.8.5
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
@@ -0,0 +1 @@
1
+ __version__ = "0.8.5"
@@ -1,5 +1,4 @@
1
1
  import argparse
2
- import asyncio
3
2
  import contextlib
4
3
  import inspect
5
4
  import json
@@ -194,7 +193,6 @@ def run_server(
194
193
  __redis_uri__: str | None = "fake",
195
194
  __database_uri__: str | None = ":memory:",
196
195
  __migrations_path__: str | None = "__inmem",
197
- __entrypoint__: Literal["server", "python-executor"] = "server",
198
196
  **kwargs: typing.Any,
199
197
  ):
200
198
  """Run the LangGraph API server."""
@@ -371,53 +369,40 @@ For production use, please use LangSmith Deployment.
371
369
  if k in inspect.signature(uvicorn.run).parameters
372
370
  }
373
371
  server_level = server_level.upper()
374
- if __entrypoint__ == "server":
375
- uvicorn.run(
376
- "langgraph_api.server:app",
377
- host=host,
378
- port=port,
379
- reload=reload,
380
- env_file=env_file,
381
- access_log=False,
382
- reload_includes=list(reload_includes) if reload_includes else None,
383
- reload_excludes=list(reload_excludes) if reload_excludes else None,
384
- log_config={
385
- "version": 1,
386
- "incremental": False,
387
- "disable_existing_loggers": False,
388
- "formatters": {
389
- "simple": {
390
- "class": "langgraph_api.logging.Formatter",
391
- }
392
- },
393
- "handlers": {
394
- "console": {
395
- "class": "logging.StreamHandler",
396
- "formatter": "simple",
397
- "stream": "ext://sys.stdout",
398
- }
399
- },
400
- "loggers": {
401
- "uvicorn": {"level": server_level},
402
- "uvicorn.error": {"level": server_level},
403
- "langgraph_api.server": {"level": server_level},
404
- },
405
- "root": {"handlers": ["console"]},
372
+ uvicorn.run(
373
+ "langgraph_api.server:app",
374
+ host=host,
375
+ port=port,
376
+ reload=reload,
377
+ env_file=env_file,
378
+ access_log=False,
379
+ reload_includes=list(reload_includes) if reload_includes else None,
380
+ reload_excludes=list(reload_excludes) if reload_excludes else None,
381
+ log_config={
382
+ "version": 1,
383
+ "incremental": False,
384
+ "disable_existing_loggers": False,
385
+ "formatters": {
386
+ "simple": {
387
+ "class": "langgraph_api.logging.Formatter",
388
+ }
406
389
  },
407
- **supported_kwargs,
408
- )
409
- elif __entrypoint__ == "python-executor":
410
- from langgraph_api.executor_entrypoint import ( # noqa: PLC0415
411
- main as executor_entrypoint_main,
412
- )
413
-
414
- asyncio.run(
415
- executor_entrypoint_main(
416
- grpc_port=8188,
417
- )
418
- )
419
- else:
420
- raise ValueError(f"Unknown entrypoint: {__entrypoint__}")
390
+ "handlers": {
391
+ "console": {
392
+ "class": "logging.StreamHandler",
393
+ "formatter": "simple",
394
+ "stream": "ext://sys.stdout",
395
+ }
396
+ },
397
+ "loggers": {
398
+ "uvicorn": {"level": server_level},
399
+ "uvicorn.error": {"level": server_level},
400
+ "langgraph_api.server": {"level": server_level},
401
+ },
402
+ "root": {"handlers": ["console"]},
403
+ },
404
+ **supported_kwargs,
405
+ )
421
406
 
422
407
 
423
408
  def main():
@@ -464,13 +449,6 @@ def main():
464
449
  default="inmem",
465
450
  help="Runtime edition to use",
466
451
  )
467
- parser.add_argument(
468
- "--entrypoint",
469
- type=str,
470
- default="server",
471
- choices=["server", "python-executor"],
472
- help="Entry point to use",
473
- )
474
452
  args = parser.parse_args()
475
453
 
476
454
  with open(args.config, encoding="utf-8") as f:
@@ -487,8 +465,6 @@ def main():
487
465
  kwargs["__redis_uri__"] = os.getenv("REDIS_URI")
488
466
  kwargs["__database_uri__"] = os.getenv("DATABASE_URI")
489
467
  kwargs["__migrations_path__"] = os.getenv("MIGRATIONS_PATH")
490
- if args.entrypoint == "python-executor":
491
- kwargs["__entrypoint__"] = "python-executor"
492
468
  run_server(
493
469
  args.host,
494
470
  args.port,
@@ -199,7 +199,6 @@ async def health_and_metrics_server():
199
199
 
200
200
 
201
201
  async def entrypoint(
202
- grpc_port: int | None = None,
203
202
  entrypoint_name: str = "python-queue",
204
203
  cancel_event: asyncio.Event | None = None,
205
204
  ):
@@ -215,7 +214,6 @@ async def entrypoint(
215
214
  functools.partial(
216
215
  lifespan.lifespan,
217
216
  with_cron_scheduler=False,
218
- grpc_port=grpc_port,
219
217
  taskset=tasks,
220
218
  cancel_event=cancel_event,
221
219
  ),
@@ -249,7 +247,7 @@ async def entrypoint(
249
247
  await asyncio.sleep(3600)
250
248
 
251
249
 
252
- async def main(grpc_port: int | None = None, entrypoint_name: str = "python-queue"):
250
+ async def main(entrypoint_name: str = "python-queue"):
253
251
  """Run the queue entrypoint and shut down gracefully on SIGTERM/SIGINT."""
254
252
 
255
253
  loop = asyncio.get_running_loop()
@@ -270,7 +268,6 @@ async def main(grpc_port: int | None = None, entrypoint_name: str = "python-queu
270
268
  # Start the queue entrypoint
271
269
  entry_task = asyncio.create_task(
272
270
  entrypoint(
273
- grpc_port=grpc_port,
274
271
  entrypoint_name=entrypoint_name,
275
272
  cancel_event=cancel_event,
276
273
  )
@@ -0,0 +1,15 @@
1
+ from langgraph_grpc_common.conversion import (
2
+ checkpoint,
3
+ config,
4
+ durability,
5
+ struct,
6
+ value,
7
+ )
8
+
9
+ __all__ = [
10
+ "checkpoint",
11
+ "config",
12
+ "durability",
13
+ "struct",
14
+ "value",
15
+ ]
@@ -5,7 +5,7 @@ from langgraph.types import Command, Send
5
5
 
6
6
  from langgraph_grpc_common import serde
7
7
  from langgraph_grpc_common.conversion._compat import MISSING, TASKS
8
- from langgraph_grpc_common.proto import engine_api_pb2, engine_common_pb2
8
+ from langgraph_grpc_common.proto import engine_common_pb2
9
9
 
10
10
 
11
11
  def serialized_value_from_proto(value: engine_common_pb2.SerializedValue) -> Any:
@@ -207,19 +207,3 @@ def base_value_to_proto(value: Any) -> engine_common_pb2.ChannelValue:
207
207
  )
208
208
 
209
209
  return engine_common_pb2.ChannelValue(serialized_value=serialize_value_proto)
210
-
211
-
212
- def input_to_proto(value: Any) -> engine_api_pb2.RunInput | None:
213
- """Convert a Python value to a RunInput proto.
214
-
215
- Returns None if value is None (for resuming execution).
216
- If the value is a Command, wraps it in RunInput with command field.
217
- Otherwise, serializes it and wraps in RunInput with input field.
218
- """
219
- if value is None:
220
- return None
221
- elif isinstance(value, Command):
222
- return engine_api_pb2.RunInput(command=command_to_proto(value))
223
- else:
224
- serialize_value_proto = any_to_serialized_value(value)
225
- return engine_api_pb2.RunInput(input=serialize_value_proto)
@@ -12,10 +12,6 @@ from . import enum_thread_status_pb2
12
12
  from . import enum_thread_stream_mode_pb2
13
13
  from . import core_api_pb2
14
14
  from . import core_api_pb2_grpc
15
- from . import executor_api_pb2
16
- from . import executor_api_pb2_grpc
17
- from . import engine_api_pb2
18
- from . import engine_api_pb2_grpc
19
15
  from . import engine_common_pb2
20
16
  from . import engine_common_pb2_grpc
21
17
  from . import checkpointer_pb2
@@ -28,10 +24,6 @@ from . import errors_pb2_grpc
28
24
  __all__ = [
29
25
  "core_api_pb2",
30
26
  "core_api_pb2_grpc",
31
- "executor_api_pb2",
32
- "executor_api_pb2_grpc",
33
- "engine_api_pb2",
34
- "engine_api_pb2_grpc",
35
27
  "engine_common_pb2",
36
28
  "engine_common_pb2_grpc",
37
29
  "checkpointer_pb2",
@@ -1 +0,0 @@
1
- __version__ = "0.8.4"
@@ -1,31 +0,0 @@
1
- import argparse
2
- import asyncio
3
- import json
4
- import logging.config
5
- import pathlib
6
-
7
- from langgraph_api.queue_entrypoint import main as queue_main
8
-
9
-
10
- async def main(grpc_port: int = 50051):
11
- with open(pathlib.Path(__file__).parent.parent / "logging.json") as file:
12
- loaded_config = json.load(file)
13
- logging.config.dictConfig(loaded_config)
14
- try:
15
- import uvloop # noqa: PLC0415
16
-
17
- uvloop.install()
18
- except ImportError:
19
- pass
20
- from langgraph_api import config # noqa: PLC0415
21
-
22
- config.IS_EXECUTOR_ENTRYPOINT = True
23
- await queue_main(grpc_port=grpc_port, entrypoint_name="python-executor")
24
-
25
-
26
- if __name__ == "__main__":
27
- parser = argparse.ArgumentParser()
28
-
29
- parser.add_argument("--grpc-port", type=int, default=50051)
30
- args = parser.parse_args()
31
- asyncio.run(main(grpc_port=args.grpc_port))
@@ -1,33 +0,0 @@
1
- from langgraph_grpc_common.conversion import (
2
- channel,
3
- checkpoint,
4
- config,
5
- durability,
6
- exception,
7
- graph,
8
- interrupt,
9
- messages,
10
- orchestrator_response,
11
- runopts,
12
- stream_mode,
13
- struct,
14
- task,
15
- value,
16
- )
17
-
18
- __all__ = [
19
- "channel",
20
- "checkpoint",
21
- "config",
22
- "durability",
23
- "exception",
24
- "graph",
25
- "interrupt",
26
- "messages",
27
- "orchestrator_response",
28
- "runopts",
29
- "stream_mode",
30
- "struct",
31
- "task",
32
- "value",
33
- ]
@@ -1,159 +0,0 @@
1
- import logging
2
- from collections.abc import Mapping
3
- from typing import Any
4
-
5
- from langgraph.channels.any_value import AnyValue
6
- from langgraph.channels.base import BaseChannel, EmptyChannelError
7
- from langgraph.channels.binop import BinaryOperatorAggregate
8
- from langgraph.channels.ephemeral_value import EphemeralValue
9
- from langgraph.channels.last_value import LastValue, LastValueAfterFinish
10
- from langgraph.channels.named_barrier_value import (
11
- NamedBarrierValue,
12
- NamedBarrierValueAfterFinish,
13
- )
14
- from langgraph.channels.topic import Topic
15
- from langgraph.channels.untracked_value import UntrackedValue
16
- from langgraph.managed.base import (
17
- ManagedValue,
18
- ManagedValueMapping,
19
- ManagedValueSpec,
20
- is_managed_value,
21
- )
22
- from langgraph.pregel import Pregel
23
-
24
- from langgraph_grpc_common.conversion._compat import MISSING
25
- from langgraph_grpc_common.conversion.exception import UserCodeExecutionErrorException
26
- from langgraph_grpc_common.conversion.value import value_from_proto, value_to_proto
27
- from langgraph_grpc_common.proto import engine_common_pb2, executor_api_pb2
28
-
29
- logger = logging.getLogger(__name__)
30
-
31
-
32
- def channel_to_proto(name: str, channel: BaseChannel) -> engine_common_pb2.Channel:
33
- try:
34
- get_result = channel.get()
35
- except EmptyChannelError:
36
- get_result = MISSING
37
-
38
- return engine_common_pb2.Channel(
39
- get_result=value_to_proto(name, get_result),
40
- is_available_result=channel.is_available(),
41
- checkpoint_result=value_to_proto(name, channel.checkpoint()),
42
- )
43
-
44
-
45
- def channels_to_proto(
46
- channels: Mapping[str, ManagedValueSpec | BaseChannel | type[ManagedValue]],
47
- ) -> engine_common_pb2.Channels:
48
- pb = {}
49
- for name, channel in channels.items():
50
- if isinstance(channel, BaseChannel):
51
- pb[name] = channel_to_proto(name, channel)
52
- else:
53
- logger.warning(
54
- "Unrecognized channel value: %s | %s", type(channel), channel
55
- )
56
- return engine_common_pb2.Channels(channels=pb)
57
-
58
-
59
- def channels_specs_to_proto(
60
- channels: Mapping[str, ManagedValueSpec | BaseChannel | type[ManagedValue]],
61
- ) -> dict[str, executor_api_pb2.ChannelSpec]:
62
- """Get static channel specs (kind, params) from graph channels. ChannelSpecs is a simple message and by passing it back it lets us avoid deserializing blobs in Go runtime."""
63
- specs: dict[str, executor_api_pb2.ChannelSpec] = {}
64
- for name, ch in channels.items():
65
- kind: executor_api_pb2.ChannelSpec.Kind.ValueType
66
- params = executor_api_pb2.ChannelParams()
67
-
68
- if is_managed_value(ch):
69
- kind = executor_api_pb2.ChannelSpec.MANAGED_VALUE
70
- elif isinstance(ch, LastValue):
71
- kind = executor_api_pb2.ChannelSpec.LAST_VALUE
72
- params.initial_value.CopyFrom(value_to_proto(name, ch.value))
73
- elif isinstance(ch, AnyValue):
74
- kind = executor_api_pb2.ChannelSpec.ANY_VALUE
75
- params.initial_value.CopyFrom(value_to_proto(name, ch.value))
76
- elif isinstance(ch, EphemeralValue):
77
- kind = executor_api_pb2.ChannelSpec.EPHEMERAL_VALUE
78
- params.guard = ch.guard
79
- params.initial_value.CopyFrom(value_to_proto(name, ch.value))
80
- elif isinstance(ch, UntrackedValue): # special case
81
- kind = executor_api_pb2.ChannelSpec.UNTRACKED_VALUE
82
- params.guard = ch.guard
83
- params.initial_value.CopyFrom(value_to_proto(name, ch.value))
84
- elif isinstance(ch, BinaryOperatorAggregate):
85
- kind = executor_api_pb2.ChannelSpec.BINARY_OPERATOR_AGGREGATE
86
- params.initial_value.CopyFrom(value_to_proto(name, ch.value))
87
- elif isinstance(ch, Topic):
88
- kind = executor_api_pb2.ChannelSpec.TOPIC
89
- params.accumulate = ch.accumulate
90
- params.initial_value.CopyFrom(value_to_proto(name, ch.values))
91
- elif isinstance(ch, NamedBarrierValue):
92
- kind = executor_api_pb2.ChannelSpec.NAMED_BARRIER_VALUE
93
- params.names.extend(list(ch.names))
94
- params.initial_value.CopyFrom(value_to_proto(name, list(ch.seen)))
95
- elif isinstance(ch, LastValueAfterFinish):
96
- kind = executor_api_pb2.ChannelSpec.LAST_VALUE_AFTER_FINISH
97
- params.initial_value.CopyFrom(value_to_proto(name, ch.value))
98
- elif isinstance(ch, NamedBarrierValueAfterFinish):
99
- kind = executor_api_pb2.ChannelSpec.NAMED_BARRIER_VALUE_AFTER_FINISH
100
- params.names.extend(list(ch.names))
101
- params.initial_value.CopyFrom(
102
- value_to_proto(name, [list(ch.seen), ch.finished])
103
- )
104
- else:
105
- kind = executor_api_pb2.ChannelSpec.UNKNOWN
106
-
107
- spec = executor_api_pb2.ChannelSpec(kind=kind, params=params)
108
- specs[name] = spec
109
-
110
- return specs
111
-
112
-
113
- def channels_from_proto(
114
- channels_pb: dict[str, engine_common_pb2.Channel] | Any,
115
- graph: Pregel,
116
- *,
117
- clear_after_read: bool = False,
118
- ) -> tuple[dict[str, BaseChannel], ManagedValueMapping]:
119
- """Convert proto channels to Python channel objects.
120
-
121
- Args:
122
- channels_pb: Proto channel map from the request.
123
- graph: The Pregel graph containing channel definitions.
124
- clear_after_read: If True, clear each channel proto after conversion
125
- to free memory incrementally. This is useful when channels contain
126
- large data to avoid holding both serialized and deserialized forms
127
- in memory simultaneously.
128
-
129
- Returns:
130
- Tuple of (channels dict, managed values dict).
131
- """
132
- channels = {}
133
- managed = {}
134
- for k, channel_pb in channels_pb.items():
135
- if k not in graph.channels:
136
- raise UserCodeExecutionErrorException(
137
- ValueError(f"Channel '{k}' not found in graph definition"),
138
- node_name=None,
139
- )
140
- v = graph.channels[k]
141
- if isinstance(v, BaseChannel):
142
- channels[k] = revive_channel(v, channel_pb)
143
- elif is_managed_value(v): # managed values
144
- managed[k] = v
145
- else:
146
- raise NotImplementedError(f"Unrecognized channel value: {type(v)} | {v}")
147
-
148
- if clear_after_read:
149
- channel_pb.Clear()
150
-
151
- return channels, managed
152
-
153
-
154
- def revive_channel(
155
- channel: BaseChannel, channel_pb: engine_common_pb2.Channel
156
- ) -> BaseChannel:
157
- val_pb = channel_pb.checkpoint_result
158
- val = MISSING if val_pb.WhichOneof("val") is None else value_from_proto(val_pb)
159
- return channel.copy().from_checkpoint(val)
@@ -1,95 +0,0 @@
1
- import traceback
2
-
3
- from langgraph.errors import GraphInterrupt, GraphRecursionError, ParentCommand
4
- from langgraph.types import Interrupt
5
-
6
- from langgraph_grpc_common import serde
7
- from langgraph_grpc_common.conversion.value import (
8
- any_to_serialized_value,
9
- command_to_proto,
10
- )
11
- from langgraph_grpc_common.proto import engine_common_pb2, errors_pb2
12
-
13
-
14
- class ExecutorDependencyError(Exception):
15
- """Exception wrapper for executor dependency failures (e.g., RemoteCheckpointer gRPC calls).
16
-
17
- Distinguishes dependency/infrastructure failures from user code execution errors
18
- and from other executor-internal errors. Tagged as "executor_dependency_internal" in gRPC
19
- trailing metadata.
20
- """
21
-
22
- def __init__(self, original_exception: Exception, context: str | None = None):
23
- self.original_exception = original_exception
24
- self.context = context
25
- super().__init__(str(original_exception))
26
-
27
-
28
- class UserCodeExecutionErrorException(Exception):
29
- """Exception wrapper for user code execution errors that need explicit marking.
30
-
31
- This exception is used to explicitly mark certain errors as user code errors
32
- (e.g., context schema validation errors) so they are checked and returned as
33
- UserCodeExecutionError to the client via grpc, not treated as internal errors.
34
-
35
- Note that we can't use UserCodeExecutionError which is protobuf message instead of Exception.
36
- """
37
-
38
- def __init__(self, original_exception: Exception, node_name: str | None = None):
39
- self.original_exception = original_exception
40
- self.node_name = node_name
41
- super().__init__(str(original_exception))
42
-
43
-
44
- def exception_to_proto(
45
- exc: Exception,
46
- ) -> (
47
- errors_pb2.UserCodeExecutionError
48
- | engine_common_pb2.WrappedInterrupts
49
- | engine_common_pb2.ParentCommand
50
- | errors_pb2.GraphRecursionLimitError
51
- ):
52
- if isinstance(exc, GraphInterrupt):
53
- if exc.args[0]:
54
- # Serialize the list of Interrupts
55
- encoding, ser = serde.get_serializer().dumps_typed(exc.args[0])
56
- serialized_interrupts = engine_common_pb2.SerializedValue(
57
- encoding=encoding, value=ser
58
- )
59
- interrupts = interrupts_to_proto(exc.args[0])
60
- return engine_common_pb2.WrappedInterrupts(
61
- interrupts=interrupts, serialized_interrupts=serialized_interrupts
62
- )
63
- else:
64
- # Static interrupt (interrupt_before or interrupt_after)
65
- return engine_common_pb2.WrappedInterrupts(
66
- interrupts=[engine_common_pb2.Interrupt()]
67
- )
68
- elif isinstance(exc, ParentCommand):
69
- cmd = exc.args[0]
70
- return engine_common_pb2.ParentCommand(command=command_to_proto(cmd))
71
- elif isinstance(exc, GraphRecursionError):
72
- return errors_pb2.GraphRecursionLimitError()
73
- elif isinstance(exc, ExecutorDependencyError):
74
- # Internal executor errors (e.g., gRPC failures from RemoteCheckpointer)
75
- # should be re-raised to be handled as internal errors, not user code errors
76
- raise
77
- else:
78
- # All other exceptions (including InternalUserCodeExecutionError) are user code errors
79
- return errors_pb2.UserCodeExecutionError(
80
- error_type=exc.__class__.__name__,
81
- error_message=str(exc),
82
- traceback=traceback.format_exc(),
83
- )
84
-
85
-
86
- def interrupts_to_proto(
87
- interrupts: tuple[Interrupt],
88
- ) -> list[engine_common_pb2.Interrupt]:
89
- return [
90
- engine_common_pb2.Interrupt(
91
- value=any_to_serialized_value(interrupt.value),
92
- id=interrupt.id,
93
- )
94
- for interrupt in interrupts
95
- ]