langgraph-api 0.12.0.dev11__tar.gz → 0.12.0.dev12__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 (289) hide show
  1. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/PKG-INFO +1 -1
  2. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/.gitignore +0 -2
  3. langgraph_api-0.12.0.dev12/benchmark/Makefile +30 -0
  4. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/README.md +1 -33
  5. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/benchmark_profiles.ts +8 -42
  6. langgraph_api-0.12.0.dev12/langgraph_api/__init__.py +1 -0
  7. langgraph_api-0.12.0.dev11/benchmark/Makefile +0 -93
  8. langgraph_api-0.12.0.dev11/benchmark/capacity_dd_report.py +0 -96
  9. langgraph_api-0.12.0.dev11/benchmark/capacity_k6.js +0 -166
  10. langgraph_api-0.12.0.dev11/benchmark/capacity_runner.mjs +0 -390
  11. langgraph_api-0.12.0.dev11/benchmark/capacity_slack_report.py +0 -417
  12. langgraph_api-0.12.0.dev11/benchmark/capacity_urls.mjs +0 -9
  13. langgraph_api-0.12.0.dev11/benchmark/mixed_workload_k6.js +0 -290
  14. langgraph_api-0.12.0.dev11/benchmark/mixed_workload_runner.mjs +0 -171
  15. langgraph_api-0.12.0.dev11/benchmark/reporting/slack_slowest_runs.py +0 -244
  16. langgraph_api-0.12.0.dev11/benchmark/reporting/slack_summary.py +0 -309
  17. langgraph_api-0.12.0.dev11/benchmark/run_local.sh +0 -27
  18. langgraph_api-0.12.0.dev11/langgraph_api/__init__.py +0 -1
  19. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/.gitignore +0 -0
  20. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/LICENSE +0 -0
  21. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/Makefile +0 -0
  22. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/README.md +0 -0
  23. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/assistant.ts +0 -0
  24. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/benchmark-runner.ts +0 -0
  25. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/benchmarks.ts +0 -0
  26. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/cancel_first_second_completes.ts +0 -0
  27. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/enqueued_runs_order.ts +0 -0
  28. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/log-failure.ts +0 -0
  29. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/meta_workload.ts +0 -0
  30. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/stream_write.ts +0 -0
  31. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/thread.ts +0 -0
  32. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/thread_runs_metadata_search.ts +0 -0
  33. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/threads_search_metadata.ts +0 -0
  34. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/types.ts +0 -0
  35. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/wait_write.ts +0 -0
  36. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/clean-cli.js +0 -0
  37. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/clean.js +0 -0
  38. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/continuous/README.md +0 -0
  39. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/continuous/pyproject.toml +0 -0
  40. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/continuous/runner.py +0 -0
  41. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/continuous/uv.lock +0 -0
  42. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/graphs.js +0 -0
  43. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/package.json +0 -0
  44. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/ramp.js +0 -0
  45. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/reporting/dd_reporting.py +0 -0
  46. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/staircase.py +0 -0
  47. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/staircase_step_k6.js +0 -0
  48. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/tsconfig.json +0 -0
  49. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/update-revision.js +0 -0
  50. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/weather.js +0 -0
  51. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/constraints.txt +0 -0
  52. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/custom_store.sql +0 -0
  53. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/forbidden.txt +0 -0
  54. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/hatch_build.py +0 -0
  55. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/healthcheck.py +0 -0
  56. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph-cloud-debugging-20260210132856.zip +0 -0
  57. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/_checkpointer/__init__.py +0 -0
  58. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/_checkpointer/_adapter.py +0 -0
  59. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/_checkpointer/protocol.py +0 -0
  60. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/_factory_utils.py +0 -0
  61. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/__init__.py +0 -0
  62. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/a2a.py +0 -0
  63. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/assistants.py +0 -0
  64. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/event_streaming.py +0 -0
  65. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/mcp/__init__.py +0 -0
  66. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/mcp/_constants.py +0 -0
  67. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/mcp/_handlers.py +0 -0
  68. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/mcp/_models.py +0 -0
  69. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/mcp/_routes.py +0 -0
  70. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/mcp/_sanitizers.py +0 -0
  71. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/meta.py +0 -0
  72. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/openapi.py +0 -0
  73. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/profile.py +0 -0
  74. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/runs.py +0 -0
  75. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/store.py +0 -0
  76. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/threads.py +0 -0
  77. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/ui.py +0 -0
  78. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/asgi_transport.py +0 -0
  79. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/asyncio.py +0 -0
  80. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/auth/__init__.py +0 -0
  81. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/auth/custom.py +0 -0
  82. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/auth/errors.py +0 -0
  83. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/auth/langsmith/__init__.py +0 -0
  84. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/auth/langsmith/backend.py +0 -0
  85. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/auth/langsmith/client.py +0 -0
  86. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/auth/middleware.py +0 -0
  87. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/auth/noop.py +0 -0
  88. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/auth/studio_user.py +0 -0
  89. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/cache.py +0 -0
  90. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/cli.py +0 -0
  91. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/command.py +0 -0
  92. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/config/__init__.py +0 -0
  93. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/config/_parse.py +0 -0
  94. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/config/schemas.py +0 -0
  95. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/cron_scheduler.py +0 -0
  96. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/encryption/__init__.py +0 -0
  97. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/encryption/aes_json.py +0 -0
  98. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/encryption/context.py +0 -0
  99. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/encryption/custom.py +0 -0
  100. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/encryption/middleware.py +0 -0
  101. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/encryption/shared.py +0 -0
  102. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/errors.py +0 -0
  103. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/event_streaming/__init__.py +0 -0
  104. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/event_streaming/capabilities.py +0 -0
  105. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/event_streaming/constants.py +0 -0
  106. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/event_streaming/event_normalizers.py +0 -0
  107. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/event_streaming/namespace.py +0 -0
  108. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/event_streaming/service.py +0 -0
  109. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/event_streaming/session.py +0 -0
  110. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/event_streaming/state_normalizers.py +0 -0
  111. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/event_streaming/types.py +0 -0
  112. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/feature_flags.py +0 -0
  113. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/graph.py +0 -0
  114. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/__init__.py +0 -0
  115. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/client.py +0 -0
  116. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
  117. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/ops/__init__.py +0 -0
  118. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/ops/assistants.py +0 -0
  119. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/ops/cache.py +0 -0
  120. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/ops/crons.py +0 -0
  121. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/ops/runs.py +0 -0
  122. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/ops/threads.py +0 -0
  123. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/server.py +0 -0
  124. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/servicers/__init__.py +0 -0
  125. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/servicers/checkpointer.py +0 -0
  126. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/servicers/encryption.py +0 -0
  127. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/http.py +0 -0
  128. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/http_metrics.py +0 -0
  129. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/http_metrics_utils.py +0 -0
  130. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/.gitignore +0 -0
  131. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/.prettierrc +0 -0
  132. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/__init__.py +0 -0
  133. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/base.py +0 -0
  134. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/build.mts +0 -0
  135. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/client.http.mts +0 -0
  136. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/client.mts +0 -0
  137. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/errors.py +0 -0
  138. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/global.d.ts +0 -0
  139. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/package.json +0 -0
  140. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/remote.py +0 -0
  141. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/schema.py +0 -0
  142. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/src/graph.mts +0 -0
  143. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/src/load.hooks.mjs +0 -0
  144. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/src/preload.mjs +0 -0
  145. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/src/utils/experiment-tracing.mts +0 -0
  146. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/src/utils/files.mts +0 -0
  147. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/src/utils/importMap.mts +0 -0
  148. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
  149. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/src/utils/serde.mts +0 -0
  150. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/sse.py +0 -0
  151. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/traceblock.mts +0 -0
  152. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/tsconfig.json +0 -0
  153. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/ui.py +0 -0
  154. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/yarn.lock +0 -0
  155. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/lc_security/__init__.py +0 -0
  156. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/lc_security/exceptions.py +0 -0
  157. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/lc_security/policy.py +0 -0
  158. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/lc_security/transport.py +0 -0
  159. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/logging.py +0 -0
  160. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/metadata.py +0 -0
  161. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/metrics_collector.py +0 -0
  162. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/metrics_otlp.py +0 -0
  163. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/middleware/__init__.py +0 -0
  164. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/middleware/ensure_store.py +0 -0
  165. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/middleware/http_logger.py +0 -0
  166. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/middleware/private_network.py +0 -0
  167. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/middleware/request_id.py +0 -0
  168. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/models/__init__.py +0 -0
  169. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/models/run.py +0 -0
  170. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/otel_context.py +0 -0
  171. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/patch.py +0 -0
  172. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/queue_entrypoint.py +0 -0
  173. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/release_tags.py +0 -0
  174. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/route.py +0 -0
  175. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/schema.py +0 -0
  176. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/self_hosted_logs.py +0 -0
  177. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/self_hosted_metrics.py +0 -0
  178. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/serde.py +0 -0
  179. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/server.py +0 -0
  180. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/sse.py +0 -0
  181. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/state.py +0 -0
  182. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/store.py +0 -0
  183. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/stream.py +0 -0
  184. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/stream_v2.py +0 -0
  185. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/timing/__init__.py +0 -0
  186. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/timing/profiler.py +0 -0
  187. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/timing/timer.py +0 -0
  188. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/traceblock.py +0 -0
  189. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/tunneling/cloudflare.py +0 -0
  190. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/utils/__init__.py +0 -0
  191. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/utils/cache.py +0 -0
  192. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/utils/config.py +0 -0
  193. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/utils/errors.py +0 -0
  194. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/utils/extract.py +0 -0
  195. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/utils/future.py +0 -0
  196. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/utils/headers.py +0 -0
  197. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/utils/network.py +0 -0
  198. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/utils/retriable_client.py +0 -0
  199. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/utils/stream_codec.py +0 -0
  200. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/utils/uuids.py +0 -0
  201. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/validation.py +0 -0
  202. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/webhook.py +0 -0
  203. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/worker.py +0 -0
  204. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/__init__.py +0 -0
  205. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/checkpointer.py +0 -0
  206. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/conversion/__init__.py +0 -0
  207. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/conversion/_compat.py +0 -0
  208. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/conversion/checkpoint.py +0 -0
  209. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/conversion/config.py +0 -0
  210. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/conversion/durability.py +0 -0
  211. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/conversion/struct.py +0 -0
  212. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/conversion/value.py +0 -0
  213. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/__init__.py +0 -0
  214. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/checkpointer_pb2.py +0 -0
  215. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +0 -0
  216. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +0 -0
  217. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +0 -0
  218. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/core_api_pb2.py +0 -0
  219. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/core_api_pb2.pyi +0 -0
  220. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +0 -0
  221. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
  222. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
  223. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/encryption_pb2.pyi +0 -0
  224. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +0 -0
  225. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
  226. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
  227. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/engine_common_pb2.pyi +0 -0
  228. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +0 -0
  229. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
  230. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
  231. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
  232. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.py +0 -0
  233. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.pyi +0 -0
  234. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
  235. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
  236. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +0 -0
  237. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
  238. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.py +0 -0
  239. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.pyi +0 -0
  240. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.py +0 -0
  241. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.pyi +0 -0
  242. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
  243. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
  244. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +0 -0
  245. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
  246. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
  247. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
  248. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +0 -0
  249. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
  250. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
  251. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
  252. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +0 -0
  253. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
  254. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +0 -0
  255. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +0 -0
  256. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +0 -0
  257. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
  258. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
  259. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
  260. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +0 -0
  261. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
  262. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
  263. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
  264. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.py +0 -0
  265. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.pyi +0 -0
  266. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
  267. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
  268. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/errors_pb2_grpc.py +0 -0
  269. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
  270. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/serde.py +0 -0
  271. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_license/__init__.py +0 -0
  272. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_license/validation.py +0 -0
  273. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_runtime/__init__.py +0 -0
  274. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_runtime/checkpoint.py +0 -0
  275. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_runtime/database.py +0 -0
  276. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_runtime/lifespan.py +0 -0
  277. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_runtime/metrics.py +0 -0
  278. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_runtime/ops.py +0 -0
  279. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_runtime/queue.py +0 -0
  280. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_runtime/retry.py +0 -0
  281. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_runtime/routes.py +0 -0
  282. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_runtime/store.py +0 -0
  283. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/logging.json +0 -0
  284. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/openapi.json +0 -0
  285. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/pyproject.toml +0 -0
  286. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/scripts/build_wheel.py +0 -0
  287. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/scripts/create_license.py +0 -0
  288. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/scripts/run_a2a_tck.py +0 -0
  289. {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.12.0.dev11
3
+ Version: 0.12.0.dev12
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
@@ -9,5 +9,3 @@ staircase_*.json
9
9
 
10
10
  # Node.js dependencies
11
11
  node_modules/
12
- capacity_summary.json
13
- cap-bench-results/
@@ -0,0 +1,30 @@
1
+ # Benchmark commands
2
+
3
+ benchmark-ramp:
4
+ make benchmark-reset
5
+ npm install
6
+ npm run build
7
+ k6 run --out json=raw_data_$(shell date +%Y-%m-%dT%H-%M-%S).json --system-tags=[] ramp.js
8
+
9
+ benchmark-charts:
10
+ npm install
11
+ node graphs.js $(shell ls -t raw_data_*.json | head -1) true
12
+
13
+ benchmark-reset:
14
+ node clean-cli.js
15
+
16
+ benchmark-new-revision:
17
+ node update-revision.js
18
+
19
+ benchmark-staircase:
20
+ python staircase.py
21
+
22
+ benchmark-staircase-reset:
23
+ python ../../scripts/reset_deployment.py -a $(BENCHMARK_APP_NAME) -n $(BENCHMARK_NAMESPACE) -db $(BENCHMARK_DB_INSTANCE)
24
+ python staircase.py
25
+
26
+ benchmark-clean:
27
+ rm -f results_*.json summary_*.json raw_data_*.json staircase_*.json *_chart_*.png
28
+
29
+ benchmark-clean-charts:
30
+ rm -f *_chart_*.png
@@ -20,23 +20,6 @@ This directory contains k6 + Python/Node benchmark tooling for LangGraph API.
20
20
  - **Example:**
21
21
  - `BENCHMARK_PROFILE=parallel-small START_LOAD=30 STEP_SIZE=15 NUM_STEPS=10 make benchmark-staircase`
22
22
 
23
- - `make benchmark-capacity` - Runs binary-search capacity tests and writes `capacity_summary.json`.
24
- - **Environment variables:**
25
- - `CLUSTER_NAME`
26
- - `WORKLOAD_NAMES` (comma-separated) or `WORKLOAD_NAME`
27
- - **Support note:** `BENCHMARK_TYPE` is supported but usually determined by profile/workload defaults.
28
- - **Example:**
29
- - `CLUSTER_NAME=dr-1-node WORKLOAD_NAMES=parallel-small,parallel-medium make benchmark-capacity`
30
-
31
- - `make benchmark-mixed` - Runs quick and long workloads concurrently to measure contention/fairness.
32
- - **Environment variables:**
33
- - `SLOWEST_N`
34
- - Quick workload knobs: `QUICK_VUS`, `QUICK_ITERATIONS`, `QUICK_STEPS`, `QUICK_DATA_SIZE`, `QUICK_MAX_WAIT_SECONDS`, `QUICK_POLL_INTERVAL`
35
- - Long workload knobs: `LONG_VUS`, `LONG_ITERATIONS`, `LONG_STEPS`, `LONG_DELAY`, `LONG_DATA_SIZE`, `LONG_MAX_WAIT_SECONDS`, `LONG_POLL_INTERVAL`
36
- - **Support note:** Does **not** support benchmark universal/profile/context knobs (`BENCHMARK_TYPE`, `BENCHMARK_PROFILE`, `RUN_MODE`, `STREAM_RESUMABLE`, or context overrides). Only mixed-workload vars + generic `BASE_URL`/`LANGSMITH_API_KEY` apply.
37
- - **Example:**
38
- - `BASE_URL=http://localhost:9123 QUICK_VUS=300 LONG_VUS=8 LONG_STEPS=60 make benchmark-mixed`
39
-
40
23
  - `make benchmark-charts` - Builds charts from the latest `raw_data_*.json` ramp output. Only works for ramp.
41
24
  - `make benchmark-clean` - Deletes local benchmark result/chart artifacts.
42
25
  - `make benchmark-reset` - Cleans benchmark server state via `clean-cli.js`.
@@ -70,7 +53,7 @@ Profiles are quick ways to configure the benchmark graph for any run depending o
70
53
  Each profile defines:
71
54
 
72
55
  - `context` (delay/steps/checkpoint/streaming/burst knobs)
73
- - `capacity` defaults (`runMode`, `rampEndBase`, `runExecutionTimeoutSeconds`)
56
+ - `runMode` default (`stateless` or `stateful`, can be overridden by `RUN_MODE`)
74
57
  - `resumable` default (can be overridden by `STREAM_RESUMABLE`)
75
58
 
76
59
  ## Core environment knobs
@@ -110,15 +93,6 @@ BENCHMARK_PROFILE=streaming-long BENCHMARK_TYPE=stream_write make benchmark-ramp
110
93
  # Staircase benchmark
111
94
  make benchmark-staircase
112
95
 
113
- # Capacity benchmark (single workload)
114
- CLUSTER_NAME=dr-1-node WORKLOAD_NAME=parallel-small make benchmark-capacity
115
-
116
- # Capacity benchmark (multiple workloads)
117
- CLUSTER_NAME=dr-1-node WORKLOAD_NAMES=parallel-small,parallel-medium make benchmark-capacity
118
-
119
- # Mixed workload benchmark
120
- make benchmark-mixed
121
-
122
96
  # Build charts from latest ramp raw_data file
123
97
  make benchmark-charts
124
98
 
@@ -135,16 +109,10 @@ make benchmark-clean
135
109
  - `*_chart_*.png` (when chart generation is run)
136
110
  - Staircase:
137
111
  - `staircase_summary.json`
138
- - Capacity:
139
- - `capacity_summary.json`
140
- - Mixed:
141
- - `mixed_workload_*.json`
142
112
 
143
113
  ## CI workflows
144
114
 
145
115
  - Daily ramp benchmark: `.github/workflows/benchmark.yml`
146
- - Capacity benchmark matrix: `.github/workflows/benchmark-capacity.yml`
147
- - Mixed benchmark matrix: `.github/workflows/benchmark-mixed.yml`
148
116
 
149
117
  ## References
150
118
 
@@ -32,16 +32,10 @@ export interface BenchmarkProfileEnv {
32
32
  BURST_SIZE?: string;
33
33
  }
34
34
 
35
- export interface CapacityProfileSettings {
36
- runMode: 'stateless' | 'stateful';
37
- rampEndBase: number;
38
- runExecutionTimeoutSeconds: number;
39
- }
40
-
41
35
  export interface BenchmarkProfile {
42
36
  context: BenchmarkContext;
43
37
  resumable: boolean;
44
- capacity: CapacityProfileSettings;
38
+ runMode: 'stateless' | 'stateful';
45
39
  }
46
40
 
47
41
  export interface ParsedBenchmarkProfile {
@@ -50,7 +44,6 @@ export interface ParsedBenchmarkProfile {
50
44
  runMode: 'stateless' | 'stateful';
51
45
  resumable: boolean;
52
46
  context: BenchmarkContext;
53
- capacity: CapacityProfileSettings;
54
47
  }
55
48
 
56
49
  const DEFAULT_PROFILE_NAME = 'default';
@@ -58,6 +51,7 @@ const DEFAULT_PROFILE_NAME = 'default';
58
51
  export const BENCHMARK_PROFILES: Record<string, BenchmarkProfile> = {
59
52
  default: {
60
53
  resumable: false,
54
+ runMode: 'stateless',
61
55
  context: {
62
56
  delay: 0,
63
57
  delay_jitter_ratio: 0.2,
@@ -71,14 +65,10 @@ export const BENCHMARK_PROFILES: Record<string, BenchmarkProfile> = {
71
65
  burst_probability: 0,
72
66
  burst_size: 0,
73
67
  },
74
- capacity: {
75
- runMode: 'stateless',
76
- rampEndBase: 200,
77
- runExecutionTimeoutSeconds: 60,
78
- },
79
68
  },
80
69
  'streaming-long': {
81
70
  resumable: true,
71
+ runMode: 'stateful',
82
72
  context: {
83
73
  delay: 0.5,
84
74
  delay_jitter_ratio: 0.2,
@@ -92,14 +82,10 @@ export const BENCHMARK_PROFILES: Record<string, BenchmarkProfile> = {
92
82
  burst_probability: 0.05,
93
83
  burst_size: 2 * 1024 * 1024,
94
84
  },
95
- capacity: {
96
- runMode: 'stateful',
97
- rampEndBase: 20,
98
- runExecutionTimeoutSeconds: 1000,
99
- },
100
85
  },
101
86
  'stateless-parallel-small': {
102
87
  resumable: false,
88
+ runMode: 'stateless',
103
89
  context: {
104
90
  delay: 0,
105
91
  delay_jitter_ratio: 0.2,
@@ -113,14 +99,10 @@ export const BENCHMARK_PROFILES: Record<string, BenchmarkProfile> = {
113
99
  burst_probability: 0,
114
100
  burst_size: 0,
115
101
  },
116
- capacity: {
117
- runMode: 'stateless',
118
- rampEndBase: 200,
119
- runExecutionTimeoutSeconds: 60,
120
- },
121
102
  },
122
103
  'stateless-parallel-medium': {
123
104
  resumable: false,
105
+ runMode: 'stateless',
124
106
  context: {
125
107
  delay: 0,
126
108
  delay_jitter_ratio: 0.2,
@@ -134,14 +116,10 @@ export const BENCHMARK_PROFILES: Record<string, BenchmarkProfile> = {
134
116
  burst_probability: 0,
135
117
  burst_size: 0,
136
118
  },
137
- capacity: {
138
- runMode: 'stateless',
139
- rampEndBase: 200,
140
- runExecutionTimeoutSeconds: 60,
141
- },
142
119
  },
143
120
  'parallel-small': {
144
121
  resumable: false,
122
+ runMode: 'stateful',
145
123
  context: {
146
124
  delay: 0,
147
125
  delay_jitter_ratio: 0.2,
@@ -155,14 +133,10 @@ export const BENCHMARK_PROFILES: Record<string, BenchmarkProfile> = {
155
133
  burst_probability: 0,
156
134
  burst_size: 0,
157
135
  },
158
- capacity: {
159
- runMode: 'stateful',
160
- rampEndBase: 200,
161
- runExecutionTimeoutSeconds: 60,
162
- },
163
136
  },
164
137
  'parallel-medium': {
165
138
  resumable: false,
139
+ runMode: 'stateful',
166
140
  context: {
167
141
  delay: 0,
168
142
  delay_jitter_ratio: 0.2,
@@ -176,11 +150,6 @@ export const BENCHMARK_PROFILES: Record<string, BenchmarkProfile> = {
176
150
  burst_probability: 0,
177
151
  burst_size: 0,
178
152
  },
179
- capacity: {
180
- runMode: 'stateful',
181
- rampEndBase: 200,
182
- runExecutionTimeoutSeconds: 60,
183
- },
184
153
  },
185
154
  };
186
155
 
@@ -254,13 +223,10 @@ export function get_profile(env: BenchmarkProfileEnv): ParsedBenchmarkProfile {
254
223
  return {
255
224
  name,
256
225
  benchmarkType: env.BENCHMARK_TYPE || 'wait_write',
257
- runMode: env.RUN_MODE ? (env.RUN_MODE === 'stateful' ? 'stateful' : 'stateless') : profile.capacity.runMode,
226
+ runMode: env.RUN_MODE ? (env.RUN_MODE === 'stateful' ? 'stateful' : 'stateless') : profile.runMode,
258
227
  resumable: env.STREAM_RESUMABLE != null && env.STREAM_RESUMABLE !== ''
259
228
  ? parseOptionalBool(env.STREAM_RESUMABLE) ?? profile.resumable
260
229
  : profile.resumable,
261
230
  context,
262
- capacity: profile.capacity,
263
231
  };
264
232
  }
265
-
266
-
@@ -0,0 +1 @@
1
+ __version__ = "0.12.0.dev12"
@@ -1,93 +0,0 @@
1
- # Benchmark commands
2
-
3
- # Capacity benchmark
4
- CLUSTER_NAME ?= dr-1-node
5
- # WORKLOAD_NAMES supports comma-separated list (e.g., "parallel-small,parallel-tiny")
6
- # Falls back to WORKLOAD_NAME for backwards compatibility
7
- WORKLOAD_NAMES ?= $(WORKLOAD_NAME)
8
- WORKLOAD_NAME ?= parallel-small
9
-
10
- # For other benchmarks
11
- BASE_URL ?= https://benchmark-dr-s-2799835ad04b501a95044223ae72ced7.staging.langgraph.app
12
- SLOWEST_N ?= 2
13
- RAMP_MULTIPLIER ?= 2
14
- WAIT_SECONDS ?= 60
15
- CLEAR_DELAY_SECONDS ?= 5
16
- DATA_SIZE ?= 1000
17
- DELAY ?= 0
18
- EXPAND ?= 1
19
- STEPS ?= 100
20
-
21
-
22
- benchmark-ramp:
23
- make benchmark-reset
24
- npm install
25
- npm run build
26
- k6 run --out json=raw_data_$(shell date +%Y-%m-%dT%H-%M-%S).json --system-tags=[] ramp.js
27
-
28
- benchmark-capacity:
29
- rm -f capacity_summary.json
30
- npm install
31
- npm run build
32
- LANGSMITH_API_KEY=$(LANGSMITH_API_KEY) \
33
- CLUSTER_NAME=$(CLUSTER_NAME) \
34
- WORKLOAD_NAMES=$(WORKLOAD_NAMES) \
35
- node capacity_runner.mjs
36
-
37
- benchmark-charts:
38
- npm install
39
- node graphs.js $(shell ls -t raw_data_*.json | head -1) true
40
-
41
- benchmark-reset:
42
- node clean-cli.js
43
-
44
- benchmark-new-revision:
45
- node update-revision.js
46
-
47
- benchmark-staircase:
48
- python staircase.py
49
-
50
- benchmark-staircase-reset:
51
- python ../../scripts/reset_deployment.py -a $(BENCHMARK_APP_NAME) -n $(BENCHMARK_NAMESPACE) -db $(BENCHMARK_DB_INSTANCE)
52
- python staircase.py
53
-
54
- benchmark-clean:
55
- rm -f results_*.json summary_*.json raw_data_*.json staircase_*.json *_chart_*.png
56
-
57
- benchmark-clean-charts:
58
- rm -f *_chart_*.png
59
-
60
- # Mixed workload benchmark - tests quick runs competing with long runs
61
- QUICK_VUS ?= 250
62
- QUICK_ITERATIONS ?= 1000
63
- QUICK_STEPS ?= 5
64
- QUICK_DATA_SIZE ?= 100
65
- QUICK_MAX_WAIT_SECONDS ?= 120
66
- QUICK_POLL_INTERVAL ?= 2
67
- LONG_VUS ?= 5
68
- LONG_ITERATIONS ?= 10
69
- LONG_STEPS ?= 50
70
- LONG_DELAY ?= 1
71
- LONG_DATA_SIZE ?= 10000
72
- LONG_MAX_WAIT_SECONDS ?= 200
73
- LONG_POLL_INTERVAL ?= 5
74
-
75
- benchmark-mixed:
76
- rm -f mixed_workload_*.json
77
- npm install
78
- BASE_URL=$(BASE_URL) \
79
- SLOWEST_N=$(SLOWEST_N) \
80
- QUICK_VUS=$(QUICK_VUS) \
81
- QUICK_ITERATIONS=$(QUICK_ITERATIONS) \
82
- QUICK_STEPS=$(QUICK_STEPS) \
83
- QUICK_DATA_SIZE=$(QUICK_DATA_SIZE) \
84
- QUICK_MAX_WAIT_SECONDS=$(QUICK_MAX_WAIT_SECONDS) \
85
- QUICK_POLL_INTERVAL=$(QUICK_POLL_INTERVAL) \
86
- LONG_VUS=$(LONG_VUS) \
87
- LONG_ITERATIONS=$(LONG_ITERATIONS) \
88
- LONG_STEPS=$(LONG_STEPS) \
89
- LONG_DELAY=$(LONG_DELAY) \
90
- LONG_DATA_SIZE=$(LONG_DATA_SIZE) \
91
- LONG_MAX_WAIT_SECONDS=$(LONG_MAX_WAIT_SECONDS) \
92
- LONG_POLL_INTERVAL=$(LONG_POLL_INTERVAL) \
93
- node mixed_workload_runner.mjs
@@ -1,96 +0,0 @@
1
- #!/usr/bin/env python3
2
- """
3
- Send capacity benchmark results to Datadog.
4
- """
5
-
6
- import json
7
- import os
8
- import sys
9
-
10
- from datadog_api_client import ApiClient, Configuration
11
- from datadog_api_client.v2.api.logs_api import LogsApi
12
- from datadog_api_client.v2.model.http_log import HTTPLog
13
- from datadog_api_client.v2.model.http_log_item import HTTPLogItem
14
-
15
-
16
- def send_capacity_results(summary_file: str):
17
- """
18
- Read capacity_summary.json and send to Datadog.
19
-
20
- The summary file format is:
21
- {
22
- "clusterName": "dr-small",
23
- "workloads": {
24
- "parallel-small": {"maxSuccessfulTarget": 10, "avgExecutionLatencySeconds": 1.5, "p95ExecutionLatencySeconds": 2.0, "p99ExecutionLatencySeconds": 2.5},
25
- "parallel-tiny": {"maxSuccessfulTarget": 20, "avgExecutionLatencySeconds": 0.8, "p95ExecutionLatencySeconds": 1.2, "p99ExecutionLatencySeconds": 1.5}
26
- }
27
- }
28
-
29
- Args:
30
- summary_file: Path to capacity_summary.json
31
- """
32
- # Get environment variables
33
- dd_api_key = os.getenv("DD_API_KEY")
34
- if not dd_api_key:
35
- print("Error: DD_API_KEY not set", file=sys.stderr) # noqa: T201
36
- sys.exit(1)
37
-
38
- dd_site = os.getenv("DD_SITE", "us5.datadoghq.com")
39
-
40
- # Read summary file
41
- try:
42
- with open(summary_file) as f:
43
- data = json.load(f)
44
- except (OSError, json.JSONDecodeError) as e:
45
- print(f"Error reading {summary_file}: {e}", file=sys.stderr) # noqa: T201
46
- sys.exit(1)
47
-
48
- cluster_name = data.get("clusterName", "unknown")
49
- workloads = data.get("workloads", {})
50
-
51
- if not workloads:
52
- print("Error: No workloads found in summary file", file=sys.stderr) # noqa: T201
53
- sys.exit(1)
54
-
55
- # Configure Datadog client
56
- configuration = Configuration()
57
- configuration.server_variables["site"] = dd_site
58
- configuration.api_key["apiKeyAuth"] = dd_api_key
59
-
60
- # Create log items for each workload
61
- log_items = []
62
- for workload_name, result in workloads.items():
63
- benchmark_data = {
64
- "clusterName": cluster_name,
65
- "workloadName": workload_name,
66
- "maxSuccessfulTarget": result.get("maxSuccessfulTarget"),
67
- "avgExecutionLatencySeconds": result.get("avgExecutionLatencySeconds"),
68
- "p95ExecutionLatencySeconds": result.get("p95ExecutionLatencySeconds"),
69
- "p99ExecutionLatencySeconds": result.get("p99ExecutionLatencySeconds"),
70
- "benchmarkType": "capacity",
71
- }
72
-
73
- log_item = HTTPLogItem(
74
- ddsource="capacity-benchmark",
75
- ddtags=f"env:benchmarking,cluster:{cluster_name},workload:{workload_name}",
76
- hostname=os.getenv("HOSTNAME", "github-actions"),
77
- message=json.dumps(benchmark_data),
78
- service="capacity-benchmark",
79
- )
80
- log_items.append(log_item)
81
-
82
- # Send all logs to Datadog
83
- with ApiClient(configuration) as api_client:
84
- api_instance = LogsApi(api_client)
85
- body = HTTPLog(log_items)
86
- api_instance.submit_log(body=body)
87
-
88
- print("Sent capacity results to Datadog") # noqa: T201
89
-
90
-
91
- if __name__ == "__main__":
92
- if len(sys.argv) < 2:
93
- print("Usage: capacity_dd_report.py <capacity_summary.json>", file=sys.stderr) # noqa: T201
94
- sys.exit(1)
95
-
96
- send_capacity_results(sys.argv[1])
@@ -1,166 +0,0 @@
1
- import { check, fail } from "k6";
2
- import { Trend, Counter } from "k6/metrics";
3
- import { Benchmarks } from "./benchmark-runners/dist/benchmarks.js";
4
- import { get_profile } from "./benchmark-runners/dist/benchmark_profiles.js";
5
-
6
- // Metrics
7
- const runExecutionLatency = new Trend("run_execution_latency");
8
- // This object is taken in by runner.validate
9
- const errorMetrics = {
10
- server_errors: new Counter("server_errors"),
11
- timeout_errors: new Counter("timeout_errors"),
12
- missing_message_errors: new Counter("missing_message_errors"),
13
- api_errors: new Counter("api_errors"), // For __error__ responses with 200 status
14
- other_errors: new Counter("other_errors"),
15
- };
16
-
17
- // Environment variables
18
- const BASE_URL = __ENV.BASE_URL;
19
- const LANGSMITH_API_KEY = __ENV.LANGSMITH_API_KEY;
20
- const TARGET = parseInt(__ENV.TARGET || "10");
21
- const RUN_EXECUTION_TIMEOUT_SECONDS = parseInt(
22
- __ENV.RUN_EXECUTION_TIMEOUT_SECONDS || "10",
23
- );
24
-
25
- const profile = get_profile(__ENV);
26
- const BENCHMARK_TYPE = profile.benchmarkType;
27
- const BENCHMARK_PROFILE = profile.name;
28
- const RUN_MODE = profile.runMode;
29
- const EFFECTIVE_CONTEXT = profile.context;
30
- const RESUMABLE = profile.resumable;
31
-
32
- // K6 options
33
- export const options = {
34
- // Include p99 in summary statistics (not included by default)
35
- summaryTrendStats: ["avg", "min", "med", "max", "p(90)", "p(95)", "p(99)"],
36
- scenarios: {
37
- capacity_test: {
38
- executor: "per-vu-iterations",
39
- vus: TARGET,
40
- iterations: 1, // Each VU executes once
41
- maxDuration: `${RUN_EXECUTION_TIMEOUT_SECONDS + 30}s`,
42
- },
43
- },
44
- };
45
-
46
- // Build request params for benchmark runners
47
- function buildRequestParams() {
48
- const headers = { "Content-Type": "application/json" };
49
- if (LANGSMITH_API_KEY) {
50
- headers["x-api-key"] = LANGSMITH_API_KEY;
51
- }
52
- return {
53
- headers,
54
- timeout: `${RUN_EXECUTION_TIMEOUT_SECONDS + 10}s`,
55
- };
56
- }
57
-
58
- // Build benchmark graph options
59
- function buildBenchmarkGraphOptions() {
60
- return {
61
- graph_id: "benchmark",
62
- stateful: RUN_MODE === "stateful",
63
- input: {},
64
- context: EFFECTIVE_CONTEXT,
65
- resumable: RESUMABLE,
66
- };
67
- }
68
-
69
- export function setup() {
70
- return {};
71
- }
72
-
73
- export default function (data) {
74
- // Print parameters (only once from VU 1)
75
- if (__VU === 1 && __ITER === 0) {
76
- console.log(`\n=== K6 Test Parameters ===`);
77
- console.log(`BASE_URL: ${BASE_URL}`);
78
- console.log(`TARGET: ${TARGET}`);
79
- console.log(`BENCHMARK_TYPE: ${BENCHMARK_TYPE}`);
80
- console.log(`BENCHMARK_PROFILE: ${BENCHMARK_PROFILE}`);
81
- console.log(`RUN_MODE: ${RUN_MODE}`);
82
- console.log(`RESUMABLE: ${RESUMABLE}`);
83
- console.log(
84
- `RUN_EXECUTION_TIMEOUT_SECONDS: ${RUN_EXECUTION_TIMEOUT_SECONDS}`,
85
- );
86
- console.log(`CONTEXT: ${JSON.stringify(EFFECTIVE_CONTEXT)}`);
87
- console.log(`=========================\n`);
88
- }
89
-
90
- const startTime = Date.now();
91
- const requestParams = buildRequestParams();
92
- const benchmarkGraphOptions = buildBenchmarkGraphOptions();
93
-
94
- // Get the appropriate benchmark runner
95
- const runner = Benchmarks.getRunner(BENCHMARK_TYPE);
96
-
97
- // Run the benchmark
98
- const result = runner.run(BASE_URL, requestParams, benchmarkGraphOptions);
99
-
100
- const totalDuration = (Date.now() - startTime) / 1000;
101
-
102
- // Record execution latency (convert to ms) - do this before timeout check so we capture all durations
103
- runExecutionLatency.add(totalDuration * 1000);
104
-
105
- const timeoutSuccess = totalDuration <= RUN_EXECUTION_TIMEOUT_SECONDS;
106
-
107
- if (!timeoutSuccess) {
108
- console.log(
109
- `VU ${__VU}: duration=${totalDuration.toFixed(2)}s success=false (timeout)`,
110
- );
111
- errorMetrics.timeout_errors.add(1);
112
- fail(
113
- `Benchmark execution timeout exceeded for VU ${__VU}: ${totalDuration.toFixed(2)}s > ${RUN_EXECUTION_TIMEOUT_SECONDS}s`,
114
- );
115
- }
116
-
117
- // Validate the result using the runner's validation
118
- const success = runner.validate(result, errorMetrics, benchmarkGraphOptions);
119
-
120
- console.log(
121
- `VU ${__VU}: duration=${totalDuration.toFixed(2)}s success=${success}`,
122
- );
123
-
124
- // Fail the VU iteration if validation failed
125
- if (!success) {
126
- fail(`Benchmark validation failed for VU ${__VU}`);
127
- }
128
- }
129
-
130
- export function handleSummary(data) {
131
- const latencyValues = data.metrics.run_execution_latency?.values;
132
- const avgLatency = latencyValues?.avg / 1000;
133
- const p95Latency = latencyValues?.["p(95)"] / 1000;
134
- const p99Latency = latencyValues?.["p(99)"] / 1000;
135
-
136
- // Collect error counts
137
- const errors = {
138
- server: data.metrics.server_errors?.values?.count || 0,
139
- timeout: data.metrics.timeout_errors?.values?.count || 0,
140
- missing_message: data.metrics.missing_message_errors?.values?.count || 0,
141
- api: data.metrics.api_errors?.values?.count || 0,
142
- other: data.metrics.other_errors?.values?.count || 0,
143
- };
144
- const totalErrors =
145
- errors.server +
146
- errors.timeout +
147
- errors.missing_message +
148
- errors.api +
149
- errors.other;
150
- // TODO: fix this to use actual success rate
151
- const totalRequests = TARGET;
152
- const successfulRequests = totalRequests - totalErrors;
153
- let successRate =
154
- totalRequests > 0 ? (successfulRequests / totalRequests) * 100 : 0;
155
-
156
- return {
157
- stdout: JSON.stringify({
158
- target: TARGET,
159
- avgExecutionLatencySeconds: avgLatency || null,
160
- p95ExecutionLatencySeconds: p95Latency || null,
161
- p99ExecutionLatencySeconds: p99Latency || null,
162
- successRate: successRate,
163
- errors: totalErrors > 0 ? errors : undefined,
164
- }),
165
- };
166
- }