langgraph-api 0.19.0.dev3__tar.gz → 0.19.0.dev4__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 (343) hide show
  1. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/PKG-INFO +2 -2
  2. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/constraints.txt +1 -1
  3. langgraph_api-0.19.0.dev4/langgraph_api/__init__.py +1 -0
  4. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/meta.py +2 -0
  5. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/runs.py +2 -1
  6. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/store.py +5 -1
  7. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/threads.py +7 -1
  8. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/event_streaming/service.py +5 -3
  9. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/graph.py +10 -1
  10. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/ops/runs.py +57 -7
  11. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/ops/threads.py +14 -0
  12. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/remote.py +20 -2
  13. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/metadata.py +8 -2
  14. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/middleware/ensure_store.py +4 -0
  15. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/models/run.py +11 -2
  16. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/priority_settings.py +12 -1
  17. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/serde.py +10 -1
  18. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/stream.py +55 -27
  19. langgraph_api-0.19.0.dev4/langgraph_api/tracing_session.py +107 -0
  20. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/validation.py +1 -0
  21. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/worker.py +33 -33
  22. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/checkpointer_pb2.py +22 -22
  23. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +5 -1
  24. langgraph_api-0.19.0.dev4/langgraph_grpc_common/proto/core_api_pb2.py +296 -0
  25. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/core_api_pb2.pyi +28 -3
  26. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/serde.py +10 -1
  27. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/openapi.json +17 -0
  28. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/pyproject.toml +1 -1
  29. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/uv.lock +55 -45
  30. langgraph_api-0.19.0.dev3/langgraph_api/__init__.py +0 -1
  31. langgraph_api-0.19.0.dev3/langgraph_api/tracing_session.py +0 -22
  32. langgraph_api-0.19.0.dev3/langgraph_grpc_common/proto/core_api_pb2.py +0 -296
  33. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/.gitignore +0 -0
  34. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/LICENSE +0 -0
  35. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/Makefile +0 -0
  36. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/README.md +0 -0
  37. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/.gitignore +0 -0
  38. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/Makefile +0 -0
  39. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/README.md +0 -0
  40. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/REPORTS.md +0 -0
  41. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/assistant.ts +0 -0
  42. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/benchmark-runner.ts +0 -0
  43. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/benchmark_profiles.ts +0 -0
  44. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/benchmarks.ts +0 -0
  45. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/cancel_first_second_completes.ts +0 -0
  46. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/classify-error.test.js +0 -0
  47. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/classify-error.ts +0 -0
  48. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/delta-turns-lib.test.js +0 -0
  49. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/delta-turns-lib.ts +0 -0
  50. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/delta_turns.ts +0 -0
  51. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/enqueued_runs_order.ts +0 -0
  52. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/interrupt_resume.ts +0 -0
  53. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/log-failure.ts +0 -0
  54. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/meta_workload.ts +0 -0
  55. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/store.ts +0 -0
  56. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/stream_write.ts +0 -0
  57. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/thread.ts +0 -0
  58. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/thread_runs_metadata_search.ts +0 -0
  59. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/threads_search_metadata.ts +0 -0
  60. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/types.ts +0 -0
  61. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/wait_write.ts +0 -0
  62. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/capacity-ci.js +0 -0
  63. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/capacity-ci.test.js +0 -0
  64. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/clean-cli.js +0 -0
  65. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/clean.js +0 -0
  66. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/continuous/README.md +0 -0
  67. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/continuous/pyproject.toml +0 -0
  68. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/continuous/runner.py +0 -0
  69. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/continuous/uv.lock +0 -0
  70. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/cpu-probe.js +0 -0
  71. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/daily-report.js +0 -0
  72. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/daily-report.test.js +0 -0
  73. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/delta-report.js +0 -0
  74. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/delta-report.test.js +0 -0
  75. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/graphs.js +0 -0
  76. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/history.js +0 -0
  77. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/history.test.js +0 -0
  78. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/host-v2.js +0 -0
  79. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/host-v2.test.js +0 -0
  80. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/multer.test.js +0 -0
  81. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/package.json +0 -0
  82. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/ramp.js +0 -0
  83. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/reporting/dd_reporting.py +0 -0
  84. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/runner-descriptions.js +0 -0
  85. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/server-metrics.js +0 -0
  86. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/server-metrics.test.js +0 -0
  87. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/slack.js +0 -0
  88. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/staircase.py +0 -0
  89. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/staircase_step_k6.js +0 -0
  90. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/tsconfig.json +0 -0
  91. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/update-revision.js +0 -0
  92. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/weather.js +0 -0
  93. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/yarn.lock +0 -0
  94. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/custom_store.sql +0 -0
  95. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/forbidden.txt +0 -0
  96. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/hatch_build.py +0 -0
  97. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/healthcheck.py +0 -0
  98. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph-cloud-debugging-20260210132856.zip +0 -0
  99. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/_checkpointer/__init__.py +0 -0
  100. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/_checkpointer/_adapter.py +0 -0
  101. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/_checkpointer/protocol.py +0 -0
  102. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/_factory_utils.py +0 -0
  103. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/__init__.py +0 -0
  104. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/a2a.py +0 -0
  105. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/a2ui.py +0 -0
  106. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/a2ui_schemas/README.md +0 -0
  107. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/a2ui_schemas/client_capabilities.json +0 -0
  108. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/a2ui_schemas/client_data_model.json +0 -0
  109. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/a2ui_schemas/client_to_server.json +0 -0
  110. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/a2ui_schemas/server_to_client.json +0 -0
  111. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/assistants.py +0 -0
  112. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/event_streaming.py +0 -0
  113. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/__init__.py +0 -0
  114. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_call_thread.py +0 -0
  115. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_calls.py +0 -0
  116. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_constants.py +0 -0
  117. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_digest.py +0 -0
  118. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_elicitation.py +0 -0
  119. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_forms.py +0 -0
  120. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_origins.py +0 -0
  121. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_outcome.py +0 -0
  122. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_pauses.py +0 -0
  123. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_request_state.py +0 -0
  124. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_routes.py +0 -0
  125. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_sanitizers.py +0 -0
  126. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_sdk.py +0 -0
  127. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_server.py +0 -0
  128. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_tools.py +0 -0
  129. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/openapi.py +0 -0
  130. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/profile.py +0 -0
  131. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/ui.py +0 -0
  132. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/asgi_transport.py +0 -0
  133. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/asyncio.py +0 -0
  134. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/auth/__init__.py +0 -0
  135. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/auth/custom.py +0 -0
  136. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/auth/errors.py +0 -0
  137. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/auth/langsmith/__init__.py +0 -0
  138. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/auth/langsmith/backend.py +0 -0
  139. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/auth/langsmith/client.py +0 -0
  140. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/auth/middleware.py +0 -0
  141. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/auth/noop.py +0 -0
  142. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/auth/studio_user.py +0 -0
  143. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/beacon_data_plane_jwt_auth.py +0 -0
  144. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/cache.py +0 -0
  145. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/cli.py +0 -0
  146. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/command.py +0 -0
  147. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/config/__init__.py +0 -0
  148. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/config/_parse.py +0 -0
  149. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/config/schemas.py +0 -0
  150. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/cron_scheduler.py +0 -0
  151. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/drain.py +0 -0
  152. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/encryption/__init__.py +0 -0
  153. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/encryption/aes_json.py +0 -0
  154. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/encryption/context.py +0 -0
  155. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/encryption/custom.py +0 -0
  156. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/encryption/middleware.py +0 -0
  157. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/encryption/shared.py +0 -0
  158. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/errors.py +0 -0
  159. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/event_streaming/__init__.py +0 -0
  160. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/event_streaming/capabilities.py +0 -0
  161. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/event_streaming/constants.py +0 -0
  162. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/event_streaming/event_normalizers.py +0 -0
  163. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/event_streaming/namespace.py +0 -0
  164. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/event_streaming/session.py +0 -0
  165. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/event_streaming/state_normalizers.py +0 -0
  166. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/event_streaming/types.py +0 -0
  167. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/executor/__init__.py +0 -0
  168. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/executor/__main__.py +0 -0
  169. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/feature_flags.py +0 -0
  170. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/__init__.py +0 -0
  171. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/client.py +0 -0
  172. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
  173. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/ops/__init__.py +0 -0
  174. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/ops/assistants.py +0 -0
  175. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/ops/cache.py +0 -0
  176. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/ops/crons.py +0 -0
  177. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/server.py +0 -0
  178. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/servicers/__init__.py +0 -0
  179. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/servicers/checkpointer.py +0 -0
  180. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/servicers/encryption.py +0 -0
  181. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/http.py +0 -0
  182. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/http_metrics.py +0 -0
  183. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/http_metrics_utils.py +0 -0
  184. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/.gitignore +0 -0
  185. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/.prettierrc +0 -0
  186. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/.yarnclean +0 -0
  187. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/__init__.py +0 -0
  188. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/base.py +0 -0
  189. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/build.mts +0 -0
  190. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/client.http.mts +0 -0
  191. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/client.mts +0 -0
  192. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/errors.py +0 -0
  193. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/global.d.ts +0 -0
  194. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/package.json +0 -0
  195. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/schema.py +0 -0
  196. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/src/auth-mutations.mts +0 -0
  197. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/src/graph.mts +0 -0
  198. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/src/load.hooks.mjs +0 -0
  199. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/src/preload.mjs +0 -0
  200. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/src/utils/experiment-tracing.mts +0 -0
  201. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/src/utils/files.mts +0 -0
  202. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/src/utils/importMap.mts +0 -0
  203. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
  204. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/src/utils/serde.mts +0 -0
  205. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/sse.py +0 -0
  206. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/traceblock.mts +0 -0
  207. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/tsconfig.json +0 -0
  208. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/ui.py +0 -0
  209. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/yarn.lock +0 -0
  210. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/lc_security/__init__.py +0 -0
  211. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/lc_security/exceptions.py +0 -0
  212. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/lc_security/policy.py +0 -0
  213. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/lc_security/transport.py +0 -0
  214. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/logging.py +0 -0
  215. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/metrics_collector.py +0 -0
  216. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/metrics_otlp.py +0 -0
  217. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/middleware/__init__.py +0 -0
  218. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/middleware/http_logger.py +0 -0
  219. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/middleware/private_network.py +0 -0
  220. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/middleware/request_id.py +0 -0
  221. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/models/__init__.py +0 -0
  222. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/operator_routes.py +0 -0
  223. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/otel_context.py +0 -0
  224. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/patch.py +0 -0
  225. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/queue_entrypoint.py +0 -0
  226. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/release_tags.py +0 -0
  227. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/route.py +0 -0
  228. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/schema.py +0 -0
  229. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/self_hosted_logs.py +0 -0
  230. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/self_hosted_metrics.py +0 -0
  231. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/server.py +0 -0
  232. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/sse.py +0 -0
  233. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/state.py +0 -0
  234. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/store.py +0 -0
  235. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/stream_v2.py +0 -0
  236. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/timing/__init__.py +0 -0
  237. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/timing/profiler.py +0 -0
  238. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/timing/startup.py +0 -0
  239. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/timing/timer.py +0 -0
  240. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/traceblock.py +0 -0
  241. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/tunneling/cloudflare.py +0 -0
  242. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/utils/__init__.py +0 -0
  243. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/utils/cache.py +0 -0
  244. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/utils/config.py +0 -0
  245. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/utils/errors.py +0 -0
  246. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/utils/extract.py +0 -0
  247. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/utils/future.py +0 -0
  248. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/utils/headers.py +0 -0
  249. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/utils/network.py +0 -0
  250. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/utils/retriable_client.py +0 -0
  251. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/utils/stream_codec.py +0 -0
  252. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/utils/uuids.py +0 -0
  253. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/webhook.py +0 -0
  254. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/worker_runtime.py +0 -0
  255. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/__init__.py +0 -0
  256. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/checkpointer.py +0 -0
  257. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/conversion/__init__.py +0 -0
  258. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/conversion/_compat.py +0 -0
  259. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/conversion/checkpoint.py +0 -0
  260. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/conversion/config.py +0 -0
  261. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/conversion/durability.py +0 -0
  262. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/conversion/store.py +0 -0
  263. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/conversion/struct.py +0 -0
  264. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/conversion/value.py +0 -0
  265. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/__init__.py +0 -0
  266. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +0 -0
  267. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +0 -0
  268. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +0 -0
  269. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
  270. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
  271. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/encryption_pb2.pyi +0 -0
  272. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +0 -0
  273. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
  274. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
  275. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/engine_common_pb2.pyi +0 -0
  276. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +0 -0
  277. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
  278. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
  279. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
  280. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.py +0 -0
  281. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.pyi +0 -0
  282. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
  283. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
  284. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +0 -0
  285. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
  286. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.py +0 -0
  287. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.pyi +0 -0
  288. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.py +0 -0
  289. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.pyi +0 -0
  290. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
  291. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
  292. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +0 -0
  293. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
  294. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
  295. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
  296. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +0 -0
  297. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
  298. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
  299. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
  300. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +0 -0
  301. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
  302. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +0 -0
  303. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +0 -0
  304. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +0 -0
  305. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
  306. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
  307. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
  308. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +0 -0
  309. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
  310. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
  311. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
  312. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.py +0 -0
  313. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.pyi +0 -0
  314. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
  315. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
  316. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/errors_pb2_grpc.py +0 -0
  317. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
  318. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/orchestrator_pb2.py +0 -0
  319. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/orchestrator_pb2.pyi +0 -0
  320. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/orchestrator_pb2_grpc.py +0 -0
  321. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/orchestrator_pb2_grpc.pyi +0 -0
  322. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/store_pb2.py +0 -0
  323. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/store_pb2.pyi +0 -0
  324. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/store_pb2_grpc.py +0 -0
  325. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/store_pb2_grpc.pyi +0 -0
  326. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/store.py +0 -0
  327. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_license/__init__.py +0 -0
  328. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_license/validation.py +0 -0
  329. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_runtime/__init__.py +0 -0
  330. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_runtime/checkpoint.py +0 -0
  331. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_runtime/database.py +0 -0
  332. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_runtime/encryption.py +0 -0
  333. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_runtime/lifespan.py +0 -0
  334. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_runtime/metrics.py +0 -0
  335. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_runtime/ops.py +0 -0
  336. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_runtime/queue.py +0 -0
  337. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_runtime/retry.py +0 -0
  338. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_runtime/routes.py +0 -0
  339. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_runtime/store.py +0 -0
  340. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/logging.json +0 -0
  341. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/scripts/build_wheel.py +0 -0
  342. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/scripts/create_license.py +0 -0
  343. {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/scripts/run_a2a_tck.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.19.0.dev3
3
+ Version: 0.19.0.dev4
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
@@ -10,7 +10,7 @@ Requires-Dist: cloudpickle>=3.0.0
10
10
  Requires-Dist: cryptography>=50.0.0
11
11
  Requires-Dist: grpcio-health-checking<1.82.0,>=1.81.0
12
12
  Requires-Dist: grpcio-tools==1.81.1
13
- Requires-Dist: grpcio<1.82.0,>=1.81.0
13
+ Requires-Dist: grpcio<1.86.0,>=1.85.0
14
14
  Requires-Dist: httptools>=0.5.0; platform_system != 'Windows'
15
15
  Requires-Dist: httpx>=0.25.0
16
16
  Requires-Dist: jsonschema-rs<0.45,>=0.35.0
@@ -18,7 +18,7 @@ structlog>=24.1.0
18
18
  cloudpickle>=3.0.0
19
19
  truststore>=0.1
20
20
  protobuf>=6.32.1,<7.0.0
21
- grpcio>=1.81.0,<1.82.0
21
+ grpcio>=1.85.0,<1.86.0
22
22
  grpcio-tools>=1.81.0,<1.82.0
23
23
  grpcio-health-checking>=1.81.0,<1.82.0
24
24
  opentelemetry-api>=0.0.1
@@ -0,0 +1 @@
1
+ __version__ = "0.19.0.dev4"
@@ -9,6 +9,7 @@ from langgraph_api.feature_flags import IS_POSTGRES_OR_GRPC_BACKEND
9
9
  from langgraph_api.http_metrics import HTTP_METRICS_COLLECTOR
10
10
  from langgraph_api.route import ApiRequest
11
11
  from langgraph_api.schema import PoolStats, PostgresPoolStats, RedisPoolStats
12
+ from langgraph_api.tracing_session import ADDRESS_SUPPORT
12
13
  from langgraph_runtime.database import connect, pool_stats
13
14
  from langgraph_runtime.metrics import get_metrics
14
15
 
@@ -81,6 +82,7 @@ async def meta_info(request: ApiRequest):
81
82
  and bool(config.TRACING),
82
83
  "langsmith_tracing_replicas": True,
83
84
  "langsmith_tracing_session_on_runs": True,
85
+ "langsmith_tracing_address": ADDRESS_SUPPORT,
84
86
  "mcp": MCP_SERVED,
85
87
  },
86
88
  "host": {
@@ -631,9 +631,9 @@ async def join_run_stream(request: ApiRequest):
631
631
  ]
632
632
 
633
633
  last_event_id = request.headers.get("last-event-id") or None
634
+ sub = await Runs.Stream.subscribe(run_id, thread_id)
634
635
 
635
636
  async def body():
636
- sub = await Runs.Stream.subscribe(run_id, thread_id)
637
637
  try:
638
638
  async for event, message, stream_id in Runs.Stream.join(
639
639
  run_id,
@@ -658,6 +658,7 @@ async def join_run_stream(request: ApiRequest):
658
658
  "Location": location,
659
659
  "Content-Location": f"/threads/{thread_id}/runs/{run_id}",
660
660
  },
661
+ on_close=lambda: sub.__aexit__(None, None, None),
661
662
  )
662
663
 
663
664
 
@@ -78,12 +78,16 @@ async def put_item(request: ApiRequest):
78
78
  namespace = tuple(payload["namespace"]) if payload.get("namespace") else ()
79
79
  if err := _validate_namespace(namespace):
80
80
  return err
81
+ ttl = payload.get("ttl")
82
+ if "ttl" not in payload:
83
+ store = await get_store()
84
+ ttl = (store.ttl_config or {}).get("default_ttl")
81
85
  handler_payload: dict[str, Any] = {
82
86
  "namespace": namespace,
83
87
  "key": payload["key"],
84
88
  "value": payload["value"],
85
89
  "index": payload.get("index"),
86
- "ttl": payload.get("ttl"),
90
+ "ttl": ttl,
87
91
  }
88
92
  await handle_event("put", handler_payload)
89
93
  if err := _validate_namespace(handler_payload["namespace"]):
@@ -534,8 +534,13 @@ async def delete_thread(request: ApiRequest):
534
534
  """Delete a thread by ID."""
535
535
  thread_id = request.path_params["thread_id"]
536
536
  validate_uuid(thread_id, "Invalid thread ID: must be a UUID")
537
+ sync_checkpoint_delete = (
538
+ request.query_params.get("sync_checkpoint_delete", "").lower() == "true"
539
+ )
537
540
  async with connect() as conn:
538
- tid = await Threads.delete(conn, thread_id)
541
+ tid = await Threads.delete(
542
+ conn, thread_id, sync_checkpoint_delete=sync_checkpoint_delete
543
+ )
539
544
  await fetchone(tid)
540
545
  return Response(status_code=204)
541
546
 
@@ -565,6 +570,7 @@ async def prune_threads(request: ApiRequest):
565
570
  pruned_count = await Threads.prune(
566
571
  thread_ids=thread_ids,
567
572
  strategy=strategy,
573
+ sync_checkpoint_delete=payload.get("sync_checkpoint_delete", False),
568
574
  )
569
575
 
570
576
  return ApiResponse({"pruned_count": pruned_count})
@@ -46,6 +46,7 @@ from langgraph_api.event_streaming.session import (
46
46
  from langgraph_api.event_streaming.types import Subscription
47
47
  from langgraph_api.feature_flags import FF_V2_EVENT_STREAMING, PREFER_GRPC_CHECKPOINTER
48
48
  from langgraph_api.schema import MultitaskStrategy
49
+ from langgraph_api.tracing_session import tracer_destination
49
50
  from langgraph_api.validation import sanitize_reserved_keys
50
51
 
51
52
  logger = structlog.stdlib.get_logger(__name__)
@@ -101,20 +102,21 @@ def validate_checkpoint_id_from_runnable_config(params: dict[str, Any]) -> str |
101
102
 
102
103
  def _langsmith_tracer_from_run_start(
103
104
  params: dict[str, Any],
104
- ) -> dict[str, str] | None:
105
+ ) -> dict[str, Any] | None:
105
106
  tracer = params.get("langsmith_tracer")
106
107
  if tracer is None:
107
108
  return None
108
109
  if not _is_record(tracer):
109
110
  raise ValueError("langsmith_tracer must be an object.")
110
- unknown = tracer.keys() - {"project_name", "example_id"}
111
+ unknown = tracer.keys() - {"project_name", "example_id", "address"}
111
112
  if unknown:
112
113
  raise ValueError(
113
114
  f"langsmith_tracer has unsupported fields: {sorted(unknown)!r}."
114
115
  )
115
116
  for key, value in tracer.items():
116
- if not isinstance(value, str):
117
+ if key != "address" and not isinstance(value, str):
117
118
  raise ValueError(f"langsmith_tracer.{key} must be a string.")
119
+ tracer_destination({"langsmith_tracer": tracer})
118
120
  return dict(tracer)
119
121
 
120
122
 
@@ -424,7 +424,16 @@ async def get_graph(
424
424
  if graph_obj.name == "LangGraph":
425
425
  update["name"] = graph_id
426
426
  if isinstance(graph_obj, BaseRemotePregel):
427
- update["config"] = config
427
+ # JS factories run in the sidecar and only see this config, so they
428
+ # get the same read-vs-run signal as Python factories here.
429
+ config = config or {}
430
+ update["config"] = {
431
+ **config,
432
+ "configurable": {
433
+ **(config.get("configurable") or {}),
434
+ "__is_for_execution__": is_for_execution(access_context),
435
+ },
436
+ }
428
437
  yield graph_obj.copy(update=update)
429
438
  finally:
430
439
  var_child_runnable_config.set(None)
@@ -39,7 +39,7 @@ from langgraph_grpc_common.proto import (
39
39
  from langgraph_sdk import Auth
40
40
  from starlette.exceptions import HTTPException
41
41
 
42
- from langgraph_api.asyncio import ValueEvent
42
+ from langgraph_api.asyncio import ValueEvent, create_task
43
43
  from langgraph_api.auth.custom import handle_event as auth_handle_event
44
44
  from langgraph_api.config import (
45
45
  STREAM_PUBLISH_RETRY_BACKOFF_FACTOR,
@@ -229,6 +229,7 @@ class GrpcStreamHandler:
229
229
  def __init__(self, run_id: UUID, thread_id: UUID):
230
230
  self.run_id = run_id
231
231
  self.thread_id = thread_id
232
+ self.join_requested = False
232
233
  self._stream = None
233
234
  self._closed = False
234
235
 
@@ -304,6 +305,8 @@ class GrpcStreamHandler:
304
305
  # Send JoinRunRequest
305
306
  join_msg = pb.StreamRunClientMessage(join=pb.JoinRunRequest(**join_kwargs))
306
307
  await self._stream.write(join_msg)
308
+ # Only after the write: a write cancelled midway may never reach the core.
309
+ self.join_requested = True
307
310
 
308
311
  # Half-close: signal we're done sending client messages.
309
312
  # Required for bidirectional streaming so the server knows to stop
@@ -348,6 +351,36 @@ class GrpcStreamHandler:
348
351
  await self.close()
349
352
 
350
353
 
354
+ async def _cancel_dropped_join(
355
+ run_id: UUID,
356
+ thread_id: UUID,
357
+ ctx: Any,
358
+ filters: list[pb.AuthFilter] | None,
359
+ ) -> None:
360
+ # Same filters and reason as the core's own cancel when a joined stream drops.
361
+ # No filters means the drop interrupted the stream's own read check.
362
+ if filters is None:
363
+ filters = await Runs.Stream.handle_event(
364
+ ctx, "read", Auth.types.ThreadsRead(run_id=run_id, thread_id=thread_id)
365
+ )
366
+ client = await get_shared_client()
367
+ try:
368
+ await client.runs.Cancel(
369
+ pb.CancelRunRequest(
370
+ filters=filters,
371
+ action=enum_cancel_run_action.interrupt,
372
+ reason="client disconnected from the run stream (on_disconnect=cancel)",
373
+ run_ids=pb.CancelRunIdsTarget(
374
+ thread_id=pb.UUID(value=str(thread_id)),
375
+ run_ids=[pb.UUID(value=str(run_id))],
376
+ ),
377
+ )
378
+ )
379
+ except AioRpcError as e:
380
+ if e.code() != StatusCode.NOT_FOUND:
381
+ raise
382
+
383
+
351
384
  def _map_multitask_strategy(
352
385
  strategy: MultitaskStrategy | None,
353
386
  ) -> enum_multitask_strategy.MultitaskStrategy | None:
@@ -1135,15 +1168,15 @@ class Runs(Authenticated):
1135
1168
  Yields tuples of (event_bytes, message_bytes, stream_id_bytes|None).
1136
1169
  """
1137
1170
  handler: GrpcStreamHandler = stream_channel
1138
- auth_filters = await Runs.Stream.handle_event(
1139
- ctx,
1140
- "read",
1141
- Auth.types.ThreadsRead(run_id=run_id, thread_id=thread_id),
1142
- )
1143
-
1144
1171
  stream_modes_pb = _map_stream_modes(stream_mode)
1172
+ auth_filters: list[pb.AuthFilter] | None = None
1145
1173
 
1146
1174
  try:
1175
+ auth_filters = await Runs.Stream.handle_event(
1176
+ ctx,
1177
+ "read",
1178
+ Auth.types.ThreadsRead(run_id=run_id, thread_id=thread_id),
1179
+ )
1147
1180
  async for event_bytes, message_bytes, stream_id_bytes in handler.join(
1148
1181
  auth_filters=auth_filters,
1149
1182
  stream_modes=stream_modes_pb or None,
@@ -1158,6 +1191,14 @@ class Runs(Authenticated):
1158
1191
  return # Return empty stream
1159
1192
  # Convert all other gRPC errors to HTTP exceptions
1160
1193
  _handle_grpc_error(e)
1194
+ except asyncio.CancelledError:
1195
+ # The core can cancel on disconnect only after it receives the join request.
1196
+ if cancel_on_disconnect and not handler.join_requested:
1197
+ create_task(
1198
+ _cancel_dropped_join(run_id, thread_id, ctx, auth_filters),
1199
+ ignore_exceptions=(HTTPException,),
1200
+ )
1201
+ raise
1161
1202
  finally:
1162
1203
  await handler.close()
1163
1204
 
@@ -1198,6 +1239,8 @@ class Runs(Authenticated):
1198
1239
  thread_id: UUID | str,
1199
1240
  *,
1200
1241
  resumable: bool = False,
1242
+ publisher_id: str | None = None,
1243
+ seq: int | None = None,
1201
1244
  ) -> None:
1202
1245
  """Publish a message to the run stream via gRPC.
1203
1246
 
@@ -1207,6 +1250,11 @@ class Runs(Authenticated):
1207
1250
  message: Event payload (serialized JSON or raw bytes)
1208
1251
  thread_id: The thread ID
1209
1252
  resumable: If true, message will be cached with TTL for resumable streaming
1253
+ publisher_id: With `seq`, lets the Lua publish scripts drop a
1254
+ retried publish instead of adding it twice; publishes outside
1255
+ those scripts, such as a plain Pub/Sub publish, ignore both.
1256
+ Pass both or neither.
1257
+ seq: The event's number within the publisher; retries resend it
1210
1258
  """
1211
1259
  run_id_pb = (
1212
1260
  None if run_id is None or run_id == "*" else pb.UUID(value=str(run_id))
@@ -1218,6 +1266,8 @@ class Runs(Authenticated):
1218
1266
  event_type=event,
1219
1267
  message=message,
1220
1268
  resumable=resumable,
1269
+ publisher_id=publisher_id,
1270
+ seq=seq,
1221
1271
  )
1222
1272
  max_duration_secs = max(0.0, STREAM_PUBLISH_RETRY_MAX_DURATION_SECS)
1223
1273
  initial_interval_secs = max(
@@ -53,6 +53,7 @@ from langgraph_api.state import (
53
53
  state_snapshot_to_thread_state,
54
54
  )
55
55
  from langgraph_api.utils import fetchone
56
+ from langgraph_api.utils.uuids import uuid7
56
57
 
57
58
  if TYPE_CHECKING:
58
59
  from collections.abc import AsyncIterator
@@ -618,6 +619,8 @@ class Threads(Authenticated):
618
619
  conn, # Not used
619
620
  thread_id: UUID | str,
620
621
  ctx: Any = None,
622
+ *,
623
+ sync_checkpoint_delete: bool = False,
621
624
  ) -> AsyncIterator[UUID]:
622
625
  auth_filters = await Threads.handle_event(
623
626
  ctx,
@@ -630,6 +633,7 @@ class Threads(Authenticated):
630
633
  request = pb.DeleteThreadRequest(
631
634
  thread_id=pb.UUID(value=_normalize_uuid(thread_id)),
632
635
  filters=auth_filters,
636
+ sync_checkpoint_delete=sync_checkpoint_delete,
633
637
  )
634
638
 
635
639
  client = await get_shared_client()
@@ -655,6 +659,8 @@ class Threads(Authenticated):
655
659
  strategy: Literal["delete", "keep_latest"] = "delete",
656
660
  batch_size: int = 100,
657
661
  ctx: Any = None,
662
+ *,
663
+ sync_checkpoint_delete: bool = False,
658
664
  ) -> int:
659
665
  """Prune threads via gRPC.
660
666
 
@@ -663,6 +669,8 @@ class Threads(Authenticated):
663
669
  strategy: "delete" to remove entirely, "keep_latest" to prune checkpoints
664
670
  batch_size: Batch size for operations
665
671
  ctx: Auth context for permission checks
672
+ sync_checkpoint_delete: Delete checkpoints before returning instead
673
+ of deferring to the background deletion queue
666
674
 
667
675
  Returns:
668
676
  Number of threads successfully pruned
@@ -709,6 +717,7 @@ class Threads(Authenticated):
709
717
  pb.DeleteThreadRequest(
710
718
  thread_id=pb.UUID(value=_normalize_uuid(tid)),
711
719
  filters=auth_filters,
720
+ sync_checkpoint_delete=sync_checkpoint_delete,
712
721
  )
713
722
  )
714
723
  except Exception:
@@ -739,6 +748,7 @@ class Threads(Authenticated):
739
748
  request = checkpointer_pb2.PruneRequest(
740
749
  thread_ids=batch,
741
750
  strategy=checkpointer_pb2.PruneRequest.PruneStrategy.KEEP_LATEST,
751
+ sync_checkpoint_delete=sync_checkpoint_delete,
742
752
  )
743
753
  await stub.Prune(request)
744
754
  processed += len(batch)
@@ -1241,6 +1251,8 @@ class Threads(Authenticated):
1241
1251
  json_dumpb(event_data),
1242
1252
  thread_id=thread_id,
1243
1253
  resumable=True,
1254
+ publisher_id=uuid7().hex,
1255
+ seq=0,
1244
1256
  )
1245
1257
 
1246
1258
  return {
@@ -1346,6 +1358,8 @@ class Threads(Authenticated):
1346
1358
  json_dumpb(event_data),
1347
1359
  thread_id=thread_id,
1348
1360
  resumable=True,
1361
+ publisher_id=uuid7().hex,
1362
+ seq=0,
1349
1363
  )
1350
1364
 
1351
1365
  return ThreadUpdateResponse(checkpoint=next_config["configurable"])
@@ -304,7 +304,7 @@ class RemotePregel(BaseRemotePregel):
304
304
  "graph_config": self.config,
305
305
  "graph_name": self.name,
306
306
  "command" if isinstance(input, Command) else "input": input,
307
- "config": config,
307
+ "config": self._with_execution_signal(config),
308
308
  **kwargs,
309
309
  }
310
310
 
@@ -339,7 +339,7 @@ class RemotePregel(BaseRemotePregel):
339
339
  "graph_config": self.config,
340
340
  "graph_name": self.name,
341
341
  "command" if isinstance(input, Command) else "input": input,
342
- "config": config,
342
+ "config": self._with_execution_signal(config),
343
343
  "stream_protocol": "v3",
344
344
  **kwargs,
345
345
  }
@@ -564,6 +564,24 @@ class RemotePregel(BaseRemotePregel):
564
564
  attrs = {**self.__dict__, **(update or {})}
565
565
  return self.__class__(**attrs)
566
566
 
567
+ def _with_execution_signal(
568
+ self, config: RunnableConfig | None
569
+ ) -> RunnableConfig | None:
570
+ # The sidecar builds a run's graph from the run config, not graph_config.
571
+ signal = ((self.config or {}).get("configurable") or {}).get(
572
+ "__is_for_execution__"
573
+ )
574
+ if signal is None:
575
+ return config
576
+ config = config or {}
577
+ return {
578
+ **config,
579
+ "configurable": {
580
+ **(config.get("configurable") or {}),
581
+ "__is_for_execution__": signal,
582
+ },
583
+ }
584
+
567
585
  async def fetch_nodes_executed(self):
568
586
  result = await _client_invoke("getNodesExecuted", {"graph_id": self.graph_id})
569
587
  await logger.adebug(
@@ -57,8 +57,14 @@ elif PROJECT_ID:
57
57
  HOST = "byoc"
58
58
  else:
59
59
  HOST = "self-hosted"
60
- PLAN = "enterprise" if plus_features_enabled() else "developer"
61
60
  USER_API_URL = os.getenv("LANGGRAPH_API_URL", None)
61
+
62
+
63
+ def current_plan() -> str:
64
+ # Read after license validation, which decides whether plus features are on.
65
+ return "enterprise" if plus_features_enabled() else "developer"
66
+
67
+
62
68
  DEPENDENCY_VERSION_DISTRIBUTIONS = {
63
69
  "langgraph.python.version": "langgraph",
64
70
  "langgraph_checkpoint.version": "langgraph-checkpoint",
@@ -220,7 +226,7 @@ async def metadata_loop() -> None:
220
226
  "langgraph.platform.host": HOST,
221
227
  "langgraph.platform.tenant_id": TENANT_ID or "",
222
228
  "langgraph.platform.project_id": PROJECT_ID or "",
223
- "langgraph.platform.plan": PLAN,
229
+ "langgraph.platform.plan": current_plan(),
224
230
  # user app features
225
231
  "user_app.uses_indexing": USES_INDEXING or "",
226
232
  "user_app.uses_custom_app": USES_CUSTOM_APP or "",
@@ -13,6 +13,10 @@ class EnsureStoreAccessible:
13
13
  self.app = app
14
14
 
15
15
  async def __call__(self, scope: Scope, receive: Receive, send: Send):
16
+ # The store isn't ready until the lifespan has started.
17
+ if scope["type"] not in ("http", "websocket"):
18
+ await self.app(scope, receive, send)
19
+ return
16
20
  global _CONFIG
17
21
  if _CONFIG is None:
18
22
  _CONFIG = await _get_partial_conf()
@@ -32,7 +32,10 @@ from langgraph_api.schema import (
32
32
  RunCommand,
33
33
  StreamMode,
34
34
  )
35
- from langgraph_api.tracing_session import resolve_tracing_session_name
35
+ from langgraph_api.tracing_session import (
36
+ resolve_tracing_session_name,
37
+ tracer_destination,
38
+ )
36
39
  from langgraph_api.utils import AsyncConnectionProto, get_auth_ctx, get_user_id
37
40
  from langgraph_api.utils.headers import get_configurable_headers
38
41
  from langgraph_api.utils.uuids import uuid7
@@ -55,6 +58,7 @@ class LangSmithTracer(TypedDict, total=False):
55
58
 
56
59
  example_id: str | None
57
60
  project_name: str | None
61
+ address: Mapping[str, str] | None
58
62
 
59
63
 
60
64
  class RunCreateDict(TypedDict):
@@ -289,7 +293,12 @@ async def create_valid_run(
289
293
  if not configurable.get("langgraph_request_id"):
290
294
  configurable["langgraph_request_id"] = request_id
291
295
  if ls_tracing := payload.get("langsmith_tracer"):
292
- configurable["__langsmith_project__"] = ls_tracing.get("project_name")
296
+ try:
297
+ ls_project, ls_address = tracer_destination(payload) or (None, None)
298
+ except ValueError as exc:
299
+ raise HTTPException(status_code=422, detail=str(exc)) from None
300
+ configurable["__langsmith_project__"] = ls_project
301
+ configurable["__langsmith_address__"] = ls_address
293
302
  configurable["__langsmith_example_id__"] = ls_tracing.get("example_id")
294
303
  if request_start_time:
295
304
  configurable["__request_start_time_ms__"] = request_start_time
@@ -138,7 +138,8 @@ def _int_in_range(
138
138
 
139
139
  def validate_priority_settings(result: Any) -> ThreadPrioritySettings:
140
140
  """The settings to store for the callback's result, with defaults for what it left out.
141
- An empty fairness_group is the default group, like a missing one.
141
+ An empty fairness_group is the default group, like a missing one, and a fairness_weight
142
+ is dropped with a warning.
142
143
 
143
144
  Raises:
144
145
  HTTPException(500): the result isn't a dict or None, has an unknown key, or has a
@@ -148,6 +149,16 @@ def validate_priority_settings(result: Any) -> ThreadPrioritySettings:
148
149
  result = {}
149
150
  if not isinstance(result, dict):
150
151
  raise _invalid(f"a {type(result).__name__}, not a dict or None")
152
+ if "fairness_weight" in result:
153
+ # langgraph-sdk 0.4.9 to 0.4.11 type the result with a fairness_weight, which the
154
+ # server never stores, so callbacks written against them may still return it.
155
+ result = {
156
+ key: value for key, value in result.items() if key != "fairness_weight"
157
+ }
158
+ logger.warning(
159
+ "Priority callback returned fairness_weight, which has no effect and is"
160
+ " ignored; remove it from the callback's result"
161
+ )
151
162
  unknown = sorted(set(result) - set(ThreadPrioritySettings.__annotations__))
152
163
  if unknown:
153
164
  raise _invalid(f"unknown keys {unknown}")
@@ -14,6 +14,7 @@ from ipaddress import (
14
14
  IPv6Interface,
15
15
  IPv6Network,
16
16
  )
17
+ from itertools import pairwise
17
18
  from pathlib import Path
18
19
  from re import Pattern
19
20
  from typing import Any, Literal, NamedTuple, cast, overload
@@ -184,7 +185,15 @@ def json_dumpb(obj) -> bytes:
184
185
  # Replace with U+FFFD (replacement character) instead of stripping,
185
186
  # so that "key\x00" becomes "key\uFFFD" rather than "key" — preventing
186
187
  # a poisoned key from projecting onto a legitimate one.
187
- return dumped.replace(rb"\\u0000", rb"\\ufffd").replace(rb"\u0000", rb"\ufffd")
188
+ parts = dumped.split(rb"\u0000")
189
+ out = [parts[0]]
190
+ for before, after in pairwise(parts):
191
+ # After an odd run of backslashes, \u0000 is the text "\u0000" (its
192
+ # backslash escaped), not a NUL character.
193
+ backslashes = len(before) - len(before.rstrip(b"\\"))
194
+ out.append(rb"\u0000" if backslashes % 2 else rb"\ufffd")
195
+ out.append(after)
196
+ return b"".join(out)
188
197
 
189
198
 
190
199
  def json_loads(content: bytes | Fragment | dict) -> Any: