langgraph-api 0.7.94__tar.gz → 0.7.95__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 (295) hide show
  1. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/Makefile +1 -1
  2. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/PKG-INFO +1 -1
  3. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/Makefile +1 -1
  4. langgraph_api-0.7.95/benchmark/README.md +152 -0
  5. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/benchmark-runners/assistant.ts +2 -2
  6. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/benchmark-runners/benchmark-runner.ts +2 -2
  7. langgraph_api-0.7.95/benchmark/benchmark-runners/benchmark_profiles.ts +263 -0
  8. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/benchmark-runners/benchmarks.ts +0 -3
  9. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/benchmark-runners/cancel_first_second_completes.ts +9 -6
  10. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/benchmark-runners/enqueued_runs_order.ts +9 -6
  11. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/benchmark-runners/meta_workload.ts +3 -5
  12. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/benchmark-runners/stream_write.ts +25 -18
  13. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/benchmark-runners/thread.ts +2 -2
  14. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/benchmark-runners/thread_runs_metadata_search.ts +9 -6
  15. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/benchmark-runners/threads_search_metadata.ts +2 -2
  16. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/benchmark-runners/types.ts +18 -17
  17. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/benchmark-runners/wait_write.ts +23 -23
  18. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/capacity_k6.js +13 -19
  19. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/capacity_runner.mjs +73 -44
  20. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/continuous/uv.lock +6 -6
  21. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/ramp.js +16 -18
  22. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/staircase.py +1 -0
  23. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/staircase_step_k6.js +9 -12
  24. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/tsconfig.json +1 -1
  25. langgraph_api-0.7.95/langgraph_api/__init__.py +1 -0
  26. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/api/__init__.py +1 -1
  27. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/api/threads.py +7 -0
  28. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/cli.py +44 -2
  29. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/config/__init__.py +4 -0
  30. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/graph.py +72 -6
  31. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/grpc/ops/threads.py +5 -0
  32. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/js/client.http.mts +32 -2
  33. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/js/client.mts +73 -2
  34. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/js/package.json +10 -10
  35. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/js/remote.py +10 -3
  36. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/js/yarn.lock +255 -248
  37. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/models/run.py +6 -1
  38. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/stream.py +96 -2
  39. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/timing/timer.py +1 -1
  40. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/validation.py +1 -0
  41. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/worker.py +8 -2
  42. langgraph_api-0.7.95/langgraph_grpc_common/proto/core_api_pb2.py +272 -0
  43. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/core_api_pb2.pyi +16 -2
  44. langgraph_api-0.7.94/benchmark/README.md +0 -65
  45. langgraph_api-0.7.94/benchmark/benchmark-runners/random_stream.ts +0 -114
  46. langgraph_api-0.7.94/langgraph_api/__init__.py +0 -1
  47. langgraph_api-0.7.94/langgraph_grpc_common/proto/core_api_pb2.py +0 -271
  48. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/.gitignore +0 -0
  49. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/LICENSE +0 -0
  50. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/README.md +0 -0
  51. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/.gitignore +0 -0
  52. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/benchmark-runners/log-failure.ts +0 -0
  53. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/capacity_dd_report.py +0 -0
  54. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/capacity_slack_report.py +0 -0
  55. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/capacity_urls.mjs +0 -0
  56. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/clean-cli.js +0 -0
  57. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/clean.js +0 -0
  58. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/continuous/README.md +0 -0
  59. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/continuous/pyproject.toml +0 -0
  60. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/continuous/runner.py +0 -0
  61. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/graphs.js +0 -0
  62. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/mixed_workload_k6.js +0 -0
  63. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/mixed_workload_runner.mjs +0 -0
  64. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/package.json +0 -0
  65. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/reporting/dd_reporting.py +0 -0
  66. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/reporting/slack_slowest_runs.py +0 -0
  67. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/reporting/slack_summary.py +0 -0
  68. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/run_local.sh +0 -0
  69. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/update-revision.js +0 -0
  70. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/benchmark/weather.js +0 -0
  71. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/constraints.txt +0 -0
  72. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/custom_store.sql +0 -0
  73. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/forbidden.txt +0 -0
  74. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/hatch_build.py +0 -0
  75. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/healthcheck.py +0 -0
  76. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph-cloud-debugging-20260210132856.zip +0 -0
  77. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/_checkpointer/__init__.py +0 -0
  78. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/_checkpointer/_adapter.py +0 -0
  79. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/_checkpointer/protocol.py +0 -0
  80. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/_factory_utils.py +0 -0
  81. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/api/a2a.py +0 -0
  82. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/api/assistants.py +0 -0
  83. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/api/mcp/__init__.py +0 -0
  84. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/api/mcp/_constants.py +0 -0
  85. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/api/mcp/_handlers.py +0 -0
  86. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/api/mcp/_models.py +0 -0
  87. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/api/mcp/_routes.py +0 -0
  88. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/api/mcp/_sanitizers.py +0 -0
  89. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/api/meta.py +0 -0
  90. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/api/openapi.py +0 -0
  91. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/api/profile.py +0 -0
  92. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/api/runs.py +0 -0
  93. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/api/store.py +0 -0
  94. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/api/ui.py +0 -0
  95. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/asgi_transport.py +0 -0
  96. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/asyncio.py +0 -0
  97. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/auth/__init__.py +0 -0
  98. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/auth/custom.py +0 -0
  99. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/auth/errors.py +0 -0
  100. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/auth/langsmith/__init__.py +0 -0
  101. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/auth/langsmith/backend.py +0 -0
  102. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/auth/langsmith/client.py +0 -0
  103. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/auth/middleware.py +0 -0
  104. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/auth/noop.py +0 -0
  105. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/auth/studio_user.py +0 -0
  106. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/cache.py +0 -0
  107. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/command.py +0 -0
  108. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/config/_parse.py +0 -0
  109. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/config/schemas.py +0 -0
  110. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/cron_scheduler.py +0 -0
  111. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/encryption/__init__.py +0 -0
  112. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/encryption/aes_json.py +0 -0
  113. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/encryption/context.py +0 -0
  114. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/encryption/custom.py +0 -0
  115. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/encryption/middleware.py +0 -0
  116. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/encryption/shared.py +0 -0
  117. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/errors.py +0 -0
  118. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/executor_entrypoint.py +0 -0
  119. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/feature_flags.py +0 -0
  120. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/grpc/__init__.py +0 -0
  121. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/grpc/client.py +0 -0
  122. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
  123. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/grpc/ops/__init__.py +0 -0
  124. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/grpc/ops/assistants.py +0 -0
  125. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/grpc/ops/cache.py +0 -0
  126. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/grpc/ops/crons.py +0 -0
  127. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/grpc/ops/runs.py +0 -0
  128. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/grpc/server.py +0 -0
  129. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/grpc/servicers/__init__.py +0 -0
  130. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/grpc/servicers/checkpointer.py +0 -0
  131. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/grpc/servicers/encryption.py +0 -0
  132. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/http.py +0 -0
  133. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/http_metrics.py +0 -0
  134. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/http_metrics_utils.py +0 -0
  135. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/js/.gitignore +0 -0
  136. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/js/.prettierrc +0 -0
  137. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/js/__init__.py +0 -0
  138. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/js/base.py +0 -0
  139. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/js/build.mts +0 -0
  140. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/js/errors.py +0 -0
  141. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/js/global.d.ts +0 -0
  142. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/js/schema.py +0 -0
  143. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/js/src/graph.mts +0 -0
  144. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/js/src/load.hooks.mjs +0 -0
  145. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/js/src/preload.mjs +0 -0
  146. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/js/src/utils/files.mts +0 -0
  147. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/js/src/utils/importMap.mts +0 -0
  148. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
  149. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/js/src/utils/serde.mts +0 -0
  150. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/js/sse.py +0 -0
  151. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/js/traceblock.mts +0 -0
  152. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/js/tsconfig.json +0 -0
  153. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/js/ui.py +0 -0
  154. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/logging.py +0 -0
  155. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/metadata.py +0 -0
  156. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/metrics_datadog.py +0 -0
  157. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/middleware/__init__.py +0 -0
  158. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/middleware/ensure_store.py +0 -0
  159. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/middleware/http_logger.py +0 -0
  160. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/middleware/private_network.py +0 -0
  161. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/middleware/request_id.py +0 -0
  162. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/models/__init__.py +0 -0
  163. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/otel_context.py +0 -0
  164. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/patch.py +0 -0
  165. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/queue_entrypoint.py +0 -0
  166. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/route.py +0 -0
  167. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/schema.py +0 -0
  168. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/self_hosted_logs.py +0 -0
  169. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/self_hosted_metrics.py +0 -0
  170. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/serde.py +0 -0
  171. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/server.py +0 -0
  172. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/sse.py +0 -0
  173. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/state.py +0 -0
  174. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/store.py +0 -0
  175. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/timing/__init__.py +0 -0
  176. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/timing/profiler.py +0 -0
  177. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/traceblock.py +0 -0
  178. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/tunneling/cloudflare.py +0 -0
  179. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/utils/__init__.py +0 -0
  180. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/utils/cache.py +0 -0
  181. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/utils/config.py +0 -0
  182. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/utils/errors.py +0 -0
  183. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/utils/extract.py +0 -0
  184. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/utils/future.py +0 -0
  185. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/utils/headers.py +0 -0
  186. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/utils/retriable_client.py +0 -0
  187. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/utils/stream_codec.py +0 -0
  188. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/utils/uuids.py +0 -0
  189. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_api/webhook.py +0 -0
  190. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/__init__.py +0 -0
  191. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/checkpointer.py +0 -0
  192. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/conversion/__init__.py +0 -0
  193. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/conversion/_compat.py +0 -0
  194. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/conversion/channel.py +0 -0
  195. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/conversion/checkpoint.py +0 -0
  196. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/conversion/config.py +0 -0
  197. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/conversion/durability.py +0 -0
  198. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/conversion/exception.py +0 -0
  199. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/conversion/graph.py +0 -0
  200. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/conversion/interrupt.py +0 -0
  201. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/conversion/messages.py +0 -0
  202. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/conversion/orchestrator_response.py +0 -0
  203. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/conversion/runopts.py +0 -0
  204. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/conversion/stream_mode.py +0 -0
  205. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/conversion/struct.py +0 -0
  206. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/conversion/task.py +0 -0
  207. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/conversion/value.py +0 -0
  208. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/__init__.py +0 -0
  209. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/checkpointer_pb2.py +0 -0
  210. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +0 -0
  211. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +0 -0
  212. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +0 -0
  213. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +0 -0
  214. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
  215. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
  216. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/encryption_pb2.pyi +0 -0
  217. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +0 -0
  218. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
  219. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/engine_api_pb2.py +0 -0
  220. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/engine_api_pb2.pyi +0 -0
  221. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/engine_api_pb2_grpc.py +0 -0
  222. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/engine_api_pb2_grpc.pyi +0 -0
  223. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
  224. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/engine_common_pb2.pyi +0 -0
  225. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +0 -0
  226. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
  227. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
  228. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
  229. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.py +0 -0
  230. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.pyi +0 -0
  231. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
  232. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
  233. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +0 -0
  234. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
  235. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.py +0 -0
  236. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.pyi +0 -0
  237. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.py +0 -0
  238. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.pyi +0 -0
  239. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
  240. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
  241. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +0 -0
  242. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
  243. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
  244. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
  245. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +0 -0
  246. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
  247. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
  248. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
  249. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +0 -0
  250. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
  251. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2.py +0 -0
  252. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2.pyi +0 -0
  253. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2_grpc.py +0 -0
  254. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2_grpc.pyi +0 -0
  255. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +0 -0
  256. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +0 -0
  257. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +0 -0
  258. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
  259. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
  260. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
  261. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +0 -0
  262. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
  263. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
  264. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
  265. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.py +0 -0
  266. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.pyi +0 -0
  267. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
  268. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
  269. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/errors_pb2_grpc.py +0 -0
  270. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
  271. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/executor_api_pb2.py +0 -0
  272. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/executor_api_pb2.pyi +0 -0
  273. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/executor_api_pb2_grpc.py +0 -0
  274. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/proto/executor_api_pb2_grpc.pyi +0 -0
  275. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/sanitize.py +0 -0
  276. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_grpc_common/serde.py +0 -0
  277. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_license/__init__.py +0 -0
  278. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_license/validation.py +0 -0
  279. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_runtime/__init__.py +0 -0
  280. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_runtime/checkpoint.py +0 -0
  281. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_runtime/database.py +0 -0
  282. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_runtime/lifespan.py +0 -0
  283. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_runtime/metrics.py +0 -0
  284. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_runtime/ops.py +0 -0
  285. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_runtime/queue.py +0 -0
  286. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_runtime/retry.py +0 -0
  287. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_runtime/routes.py +0 -0
  288. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/langgraph_runtime/store.py +0 -0
  289. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/logging.json +0 -0
  290. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/openapi.json +0 -0
  291. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/pyproject.toml +0 -0
  292. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/scripts/build_wheel.py +0 -0
  293. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/scripts/create_license.py +0 -0
  294. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/scripts/run_a2a_tck.py +0 -0
  295. {langgraph_api-0.7.94 → langgraph_api-0.7.95}/uv.lock +0 -0
@@ -1,7 +1,7 @@
1
1
  .PHONY: build release lint format test test_watch start start-inmem start-inmem-license-oss start start-js-server build-go-server start-go-server stop-go-server check-version check-base-imports test-a2a-tck test-a2a-tck-mandatory start-test-a2a-tck start-test-a2a-tck-mandatory start-test-a2a-tck-watch test-mcp-conformance start-test-mcp-conformance list-mcp-scenarios
2
2
 
3
3
  # Environment variables
4
- LANGSERVE_GRAPHS_ALL = '{"agent": {"path": "./tests/graphs/agent.py:graph", "description": "agent"}, "assistant_id_runtime": "./tests/graphs/assistant_id_runtime.py:graph", "custom_lifespan": "./tests/graphs/my_router.py:graph", "single_node": "./tests/graphs/single_node.py:graph", "benchmark": "./tests/graphs/benchmark.py:graph", "config_graph": "./tests/graphs/config_graph.py:graph", "other": "./tests/graphs/other.py:make_graph", "weather": "./tests/graphs/weather.py:mk_weather_graph", "searchy": "./tests/graphs/searchy.py:graph", "agent_simple": "./tests/graphs/agent_simple.py:graph", "simple_runtime": "./tests/graphs/simple_runtime.py:graph", "agent_interrupt": "./tests/graphs/agent_interrupt.py:graph", "message_type_test": "./tests/graphs/message_type_test.py:graph", "remote_subgraph_parent": "./tests/graphs/remote_subgraph_parent.py:graph", "simple_remote": "./tests/graphs/simple_remote.py:graph", "nested_subgraphs": "./tests/graphs/nested_subgraphs.py:graph", "functional_fibonacci": "./tests/graphs/functional_fibonacci.py:fibonacci", "state_graph_fibonacci": "./tests/graphs/state_graph_fibonacci.py:fibonacci", "max_concurrency_graph": "./tests/graphs/max_concurrency_graph.py:graph", "unserializable_subgraph": "./tests/graphs/unserializable_subgraph.py:graph", "agent_interrupt_text": "./tests/graphs/agent_interrupt_text.py:graph", "agent_echo_stream": "./tests/graphs/agent_echo_stream.py:graph", "runtime_graph": "./tests/graphs/runtime_graph.py:graph", "tool_call_chunk_stream": "./tests/graphs/tool_call_chunk_stream.py:graph"}'
4
+ LANGSERVE_GRAPHS_ALL = '{"agent": {"path": "./tests/graphs/agent.py:graph", "description": "agent"}, "assistant_id_runtime": "./tests/graphs/assistant_id_runtime.py:graph", "custom_lifespan": "./tests/graphs/my_router.py:graph", "single_node": "./tests/graphs/single_node.py:graph", "benchmark": "./tests/graphs/benchmark.py:graph", "config_graph": "./tests/graphs/config_graph.py:graph", "other": "./tests/graphs/other.py:make_graph", "weather": "./tests/graphs/weather.py:mk_weather_graph", "searchy": "./tests/graphs/searchy.py:graph", "agent_simple": "./tests/graphs/agent_simple.py:graph", "simple_runtime": "./tests/graphs/simple_runtime.py:graph", "agent_interrupt": "./tests/graphs/agent_interrupt.py:graph", "message_type_test": "./tests/graphs/message_type_test.py:graph", "remote_subgraph_parent": "./tests/graphs/remote_subgraph_parent.py:graph", "simple_remote": "./tests/graphs/simple_remote.py:graph", "nested_subgraphs": "./tests/graphs/nested_subgraphs.py:graph", "functional_fibonacci": "./tests/graphs/functional_fibonacci.py:fibonacci", "state_graph_fibonacci": "./tests/graphs/state_graph_fibonacci.py:fibonacci", "max_concurrency_graph": "./tests/graphs/max_concurrency_graph.py:graph", "unserializable_subgraph": "./tests/graphs/unserializable_subgraph.py:graph", "agent_interrupt_text": "./tests/graphs/agent_interrupt_text.py:graph", "agent_echo_stream": "./tests/graphs/agent_echo_stream.py:graph", "runtime_graph": "./tests/graphs/runtime_graph.py:graph", "tool_call_chunk_stream": "./tests/graphs/tool_call_chunk_stream.py:graph", "ui_tool_call_stream": "./tests/graphs/ui_tool_call_stream.py:graph"}'
5
5
  LANGSERVE_GRAPHS_AUTH = '{"agent": {"path": "./tests/graphs/agent.py:graph", "description": "agent"}, "assistant_id_runtime": "./tests/graphs/assistant_id_runtime.py:graph", "config_graph": "./tests/graphs/config_graph.py:graph", "other": "./tests/graphs/other.py:make_graph", "weather": "./tests/graphs/weather.py:mk_weather_graph", "searchy": "./tests/graphs/searchy.py:graph", "agent_simple": "./tests/graphs/agent_simple.py:graph", "simple_runtime": "./tests/graphs/simple_runtime.py:graph", "functional_fibonacci": "./tests/graphs/functional_fibonacci.py:fibonacci", "state_graph_fibonacci": "./tests/graphs/state_graph_fibonacci.py:fibonacci", "runtime_graph": "./tests/graphs/runtime_graph.py:graph"}'
6
6
 
7
7
  # Go server management
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.7.94
3
+ Version: 0.7.95
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
@@ -1,7 +1,7 @@
1
1
  # Benchmark commands
2
2
 
3
3
  # Capacity benchmark
4
- CLUSTER_NAME ?= dr-small
4
+ CLUSTER_NAME ?= dr-1-node
5
5
  # WORKLOAD_NAMES supports comma-separated list (e.g., "parallel-small,parallel-tiny")
6
6
  # Falls back to WORKLOAD_NAME for backwards compatibility
7
7
  WORKLOAD_NAMES ?= $(WORKLOAD_NAME)
@@ -0,0 +1,152 @@
1
+ # Benchmarking
2
+
3
+ This directory contains k6 + Python/Node benchmark tooling for LangGraph API.
4
+
5
+ ## Available Commands
6
+
7
+ - `make benchmark-ramp` - Ramps up to a set number of concurrent virtual users, holds plateau load, then ramps down.
8
+ - **Environment variables:**
9
+ - `LOAD_SIZE`, `LEVELS`, `PLATEAU_DURATION`
10
+ - `P95_RUN_DURATION`, `AVERAGE_RUN_DURATION`
11
+ - **Example:**
12
+ - `BENCHMARK_PROFILE=streaming-long BENCHMARK_TYPE=stream_write LOAD_SIZE=300 LEVELS=3 make benchmark-ramp`
13
+
14
+ - `make benchmark-staircase` - Runs stepwise capacity testing with SLO checks and a final staircase summary.
15
+ - **Environment variables:**
16
+ - `K6_EXECUTOR`, `START_LOAD`, `STEP_SIZE`, `NUM_STEPS`, `PLATEAU_DURATION`
17
+ - `MAX_VUS`, `MAX_VUS_MULTIPLIER`, `PRE_ALLOCATED_VUS`
18
+ - `WARMUP_ITERS`, `COOLDOWN_DURATION`
19
+ - `MIN_SUCCESS_RATE`, `MAX_P50_DURATION_MS`, `MAX_P95_DURATION_MS`, `ABORT_ERROR_RATE`
20
+ - **Example:**
21
+ - `BENCHMARK_PROFILE=parallel-small START_LOAD=30 STEP_SIZE=15 NUM_STEPS=10 make benchmark-staircase`
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
+ - `make benchmark-charts` - Builds charts from the latest `raw_data_*.json` ramp output. Only works for ramp.
41
+ - `make benchmark-clean` - Deletes local benchmark result/chart artifacts.
42
+ - `make benchmark-reset` - Cleans benchmark server state via `clean-cli.js`.
43
+ - `make benchmark-new-revision` - Triggers a new benchmark deployment revision.
44
+
45
+ ## Benchmark runner types (`BENCHMARK_TYPE`)
46
+
47
+ The runner contains the actual logic each virtual user will execute during the benchmark and steps to validate the logic worked correctly. Options are:
48
+
49
+ - `wait_write` - Uses `/runs/wait` and validates completion plus expected counter progression.
50
+ - `stream_write` - Uses `/runs/stream` with `stream_mode=['values','messages']` and validates streamed events.
51
+ - `assistants` - Benchmarks assistant CRUD/list style API behavior.
52
+ - `threads` - Benchmarks thread CRUD/list style API behavior.
53
+ - `enqueued_runs_order` - Enqueues multiple runs and validates completion ordering behavior.
54
+ - `cancel_first_second_completes` - Starts two runs, cancels one, and validates cancellation semantics.
55
+ - `thread_runs_metadata_search` - Creates a run and validates filtering/search by run metadata.
56
+ - `threads_search_metadata` - Validates thread metadata search/filter behavior.
57
+ - `meta_workload` (randomly delegates to one of the others)
58
+
59
+ ## Profiles (`BENCHMARK_PROFILE`)
60
+
61
+ Profiles are quick ways to configure the benchmark graph for any run depending on the use case.
62
+
63
+ - `default` - Baseline single-step stateless profile with small checkpoint writes.
64
+ - `streaming-long` - Long-running stateful streaming profile with 2KB regular chunks and occasional 2MB spikes.
65
+ - `stateless-parallel-small` - Stateless high-fanout profile with small checkpoint payloads.
66
+ - `stateless-parallel-medium` - Stateless high-fanout profile with medium checkpoint payloads.
67
+ - `parallel-small` - Stateful high-fanout profile with small checkpoint payloads.
68
+ - `parallel-medium` - Stateful high-fanout profile with medium checkpoint payloads.
69
+
70
+ Each profile defines:
71
+
72
+ - `context` (delay/steps/checkpoint/streaming/burst knobs)
73
+ - `capacity` defaults (`runMode`, `rampEndBase`, `runExecutionTimeoutSeconds`)
74
+ - `resumable` default (can be overridden by `STREAM_RESUMABLE`)
75
+
76
+ ## Core environment knobs
77
+
78
+ Common:
79
+
80
+ - `BASE_URL` - Target LangGraph API endpoint for benchmark traffic.
81
+ - `LANGSMITH_API_KEY` - API key used for authenticated benchmark deployments.
82
+ - `BENCHMARK_TYPE` - Selects which runner implementation to execute.
83
+ - `BENCHMARK_PROFILE` - Selects a named profile from `benchmark_profiles.ts`.
84
+ - `RUN_MODE` (`stateless`/`stateful`) - Controls whether runs execute directly or via created threads.
85
+ - `STREAM_RESUMABLE` - Overrides profile default for resumable stream persistence.
86
+
87
+ Context overrides (merged on top of profile):
88
+
89
+ - `DELAY` - Per-node sleep delay in seconds.
90
+ - `DELAY_JITTER_RATIO` - Randomized delay spread ratio around `DELAY` (for desynchronizing requests).
91
+ - `EXPAND` - Fanout width (number of parallel branches at start).
92
+ - `STEPS` - Number of graph turns/iterations to execute.
93
+ - `CHECKPOINT_SIZE` - Bytes written per checkpoint operation.
94
+ - `LLM_ENABLED` - Enables fake LLM streaming inside the benchmark graph.
95
+ - `STREAM_SIZE` - Normal total streamed payload size (bytes).
96
+ - `CHUNK_SIZE` - Stream chunk size (bytes) when emitting payload.
97
+ - `BURST_MODE` - Enables probabilistic burst streaming behavior.
98
+ - `BURST_PROBABILITY` - Probability that a run uses burst payload size.
99
+ - `BURST_SIZE` - Burst payload size (bytes) when burst mode triggers.
100
+
101
+ ## Common commands
102
+
103
+ ```bash
104
+ # Ramp benchmark (default profile + wait_write unless overridden)
105
+ make benchmark-ramp
106
+
107
+ # Ramp with profile + stream runner
108
+ BENCHMARK_PROFILE=streaming-long BENCHMARK_TYPE=stream_write make benchmark-ramp
109
+
110
+ # Staircase benchmark
111
+ make benchmark-staircase
112
+
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
+ # Build charts from latest ramp raw_data file
123
+ make benchmark-charts
124
+
125
+ # Remove local benchmark artifacts
126
+ make benchmark-clean
127
+ ```
128
+
129
+ ## Outputs
130
+
131
+ - Ramp:
132
+ - `raw_data_<timestamp>.json`
133
+ - `results_<timestamp>.json`
134
+ - `summary_<timestamp>.json`
135
+ - `*_chart_*.png` (when chart generation is run)
136
+ - Staircase:
137
+ - `staircase_summary.json`
138
+ - Capacity:
139
+ - `capacity_summary.json`
140
+ - Mixed:
141
+ - `mixed_workload_*.json`
142
+
143
+ ## CI workflows
144
+
145
+ - 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
+
149
+ ## References
150
+
151
+ - [k6 docs](https://k6.io/docs/)
152
+ - [k6 JavaScript API](https://k6.io/docs/javascript-api/)
@@ -23,7 +23,7 @@ export class Assistant extends BenchmarkRunner {
23
23
  static run(
24
24
  baseUrl: string,
25
25
  requestParams: Record<string, unknown>,
26
- _benchmarkGraphOptions?: BenchmarkGraphOptions
26
+ _benchmarkGraphOptions: BenchmarkGraphOptions
27
27
  ): BenchmarkResult<AssistantData> {
28
28
  const graph_id = DEFAULT_GRAPH_ID;
29
29
  let metadata: Record<string, string> = {
@@ -73,7 +73,7 @@ export class Assistant extends BenchmarkRunner {
73
73
  static validate(
74
74
  result: BenchmarkResult<AssistantData>,
75
75
  errorMetrics: ErrorMetrics,
76
- _benchmarkGraphOptions?: BenchmarkGraphOptions
76
+ _benchmarkGraphOptions: BenchmarkGraphOptions
77
77
  ): boolean {
78
78
  const d = result.data;
79
79
  if (!d) {
@@ -16,7 +16,7 @@ export abstract class BenchmarkRunner {
16
16
  static run(
17
17
  _baseUrl: string,
18
18
  _requestParams: Record<string, unknown>,
19
- _benchmarkGraphOptions?: BenchmarkGraphOptions
19
+ _benchmarkGraphOptions: BenchmarkGraphOptions
20
20
  ): BenchmarkResult<unknown> {
21
21
  throw new Error('Not implemented');
22
22
  }
@@ -28,7 +28,7 @@ export abstract class BenchmarkRunner {
28
28
  static validate(
29
29
  _result: BenchmarkResult<unknown>,
30
30
  _errorMetrics: ErrorMetrics,
31
- _benchmarkGraphOptions?: BenchmarkGraphOptions
31
+ _benchmarkGraphOptions: BenchmarkGraphOptions
32
32
  ): boolean {
33
33
  throw new Error('Not implemented');
34
34
  }
@@ -0,0 +1,263 @@
1
+ export interface BenchmarkContext {
2
+ delay: number;
3
+ delay_jitter_ratio: number;
4
+ expand: number;
5
+ steps: number;
6
+ checkpoint_size: number;
7
+ llm_enabled: boolean;
8
+ stream_size: number;
9
+ chunk_size: number;
10
+ burst_mode: boolean;
11
+ burst_probability: number;
12
+ burst_size: number;
13
+ }
14
+
15
+ export interface BenchmarkProfileEnv {
16
+ BENCHMARK_PROFILE?: string;
17
+ BENCHMARK_TYPE?: string;
18
+ RUN_MODE?: string;
19
+ STREAM_RESUMABLE?: string;
20
+ DELAY?: string;
21
+ DELAY_JITTER_RATIO?: string;
22
+ EXPAND?: string;
23
+ STEPS?: string;
24
+ CHECKPOINT_SIZE?: string;
25
+ LLM_ENABLED?: string;
26
+ STREAM_SIZE?: string;
27
+ CHUNK_SIZE?: string;
28
+ BURST_MODE?: string;
29
+ BURST_PROBABILITY?: string;
30
+ BURST_SIZE?: string;
31
+ }
32
+
33
+ export interface CapacityProfileSettings {
34
+ runMode: 'stateless' | 'stateful';
35
+ rampEndBase: number;
36
+ runExecutionTimeoutSeconds: number;
37
+ }
38
+
39
+ export interface BenchmarkProfile {
40
+ context: BenchmarkContext;
41
+ resumable: boolean;
42
+ capacity: CapacityProfileSettings;
43
+ }
44
+
45
+ export interface ParsedBenchmarkProfile {
46
+ name: string;
47
+ benchmarkType: string;
48
+ runMode: 'stateless' | 'stateful';
49
+ resumable: boolean;
50
+ context: BenchmarkContext;
51
+ capacity: CapacityProfileSettings;
52
+ }
53
+
54
+ const DEFAULT_PROFILE_NAME = 'default';
55
+
56
+ export const BENCHMARK_PROFILES: Record<string, BenchmarkProfile> = {
57
+ default: {
58
+ resumable: false,
59
+ context: {
60
+ delay: 0,
61
+ delay_jitter_ratio: 0.2,
62
+ expand: 1,
63
+ steps: 1,
64
+ checkpoint_size: 1024,
65
+ llm_enabled: false,
66
+ stream_size: 0,
67
+ chunk_size: 1,
68
+ burst_mode: false,
69
+ burst_probability: 0,
70
+ burst_size: 0,
71
+ },
72
+ capacity: {
73
+ runMode: 'stateless',
74
+ rampEndBase: 200,
75
+ runExecutionTimeoutSeconds: 60,
76
+ },
77
+ },
78
+ 'streaming-long': {
79
+ resumable: true,
80
+ context: {
81
+ delay: 0.5,
82
+ delay_jitter_ratio: 0.2,
83
+ expand: 1,
84
+ steps: 300,
85
+ checkpoint_size: 0,
86
+ llm_enabled: true,
87
+ stream_size: 2 * 1024,
88
+ chunk_size: 2 * 1024,
89
+ burst_mode: true,
90
+ burst_probability: 0.05,
91
+ burst_size: 2 * 1024 * 1024,
92
+ },
93
+ capacity: {
94
+ runMode: 'stateful',
95
+ rampEndBase: 20,
96
+ runExecutionTimeoutSeconds: 1000,
97
+ },
98
+ },
99
+ 'stateless-parallel-small': {
100
+ resumable: false,
101
+ context: {
102
+ delay: 0,
103
+ delay_jitter_ratio: 0.2,
104
+ expand: 100,
105
+ steps: 1,
106
+ checkpoint_size: 1_000,
107
+ llm_enabled: false,
108
+ stream_size: 0,
109
+ chunk_size: 1,
110
+ burst_mode: false,
111
+ burst_probability: 0,
112
+ burst_size: 0,
113
+ },
114
+ capacity: {
115
+ runMode: 'stateless',
116
+ rampEndBase: 200,
117
+ runExecutionTimeoutSeconds: 60,
118
+ },
119
+ },
120
+ 'stateless-parallel-medium': {
121
+ resumable: false,
122
+ context: {
123
+ delay: 0,
124
+ delay_jitter_ratio: 0.2,
125
+ expand: 100,
126
+ steps: 1,
127
+ checkpoint_size: 10_000,
128
+ llm_enabled: false,
129
+ stream_size: 0,
130
+ chunk_size: 1,
131
+ burst_mode: false,
132
+ burst_probability: 0,
133
+ burst_size: 0,
134
+ },
135
+ capacity: {
136
+ runMode: 'stateless',
137
+ rampEndBase: 200,
138
+ runExecutionTimeoutSeconds: 60,
139
+ },
140
+ },
141
+ 'parallel-small': {
142
+ resumable: false,
143
+ context: {
144
+ delay: 0,
145
+ delay_jitter_ratio: 0.2,
146
+ expand: 100,
147
+ steps: 1,
148
+ checkpoint_size: 1_000,
149
+ llm_enabled: false,
150
+ stream_size: 0,
151
+ chunk_size: 1,
152
+ burst_mode: false,
153
+ burst_probability: 0,
154
+ burst_size: 0,
155
+ },
156
+ capacity: {
157
+ runMode: 'stateful',
158
+ rampEndBase: 200,
159
+ runExecutionTimeoutSeconds: 60,
160
+ },
161
+ },
162
+ 'parallel-medium': {
163
+ resumable: false,
164
+ context: {
165
+ delay: 0,
166
+ delay_jitter_ratio: 0.2,
167
+ expand: 100,
168
+ steps: 1,
169
+ checkpoint_size: 10_000,
170
+ llm_enabled: false,
171
+ stream_size: 0,
172
+ chunk_size: 1,
173
+ burst_mode: false,
174
+ burst_probability: 0,
175
+ burst_size: 0,
176
+ },
177
+ capacity: {
178
+ runMode: 'stateful',
179
+ rampEndBase: 200,
180
+ runExecutionTimeoutSeconds: 60,
181
+ },
182
+ },
183
+ };
184
+
185
+ export function getBenchmarkProfile(profileName?: string): { name: string; profile: BenchmarkProfile } {
186
+ const resolvedName = profileName || DEFAULT_PROFILE_NAME;
187
+ const profile = BENCHMARK_PROFILES[resolvedName];
188
+ if (!profile) {
189
+ throw new Error(
190
+ `Unknown BENCHMARK_PROFILE: "${profileName}". Must be one of: ${Object.keys(BENCHMARK_PROFILES).join(', ')}`
191
+ );
192
+ }
193
+ return { name: resolvedName, profile };
194
+ }
195
+
196
+ export function resolveBenchmarkContext(
197
+ profileName: string | undefined,
198
+ overrides: Partial<BenchmarkContext> = {}
199
+ ): BenchmarkContext {
200
+ const { profile } = getBenchmarkProfile(profileName);
201
+ return {
202
+ ...profile.context,
203
+ ...overrides,
204
+ };
205
+ }
206
+
207
+ /**
208
+ * There are two possible counts for expected events: normal and burst.
209
+ * ratio * (expected_steps * expand) + 2 will be the min, but could be larger if we hit bursts.
210
+ */
211
+ export function getExpectedEvents(context: BenchmarkContext): number {
212
+ return (3 + context.stream_size / context.chunk_size) * (context.steps * context.expand) + 2;
213
+ }
214
+
215
+ function parseOptionalInt(value?: string): number | undefined {
216
+ if (value == null || value === '') return undefined;
217
+ return parseInt(value, 10);
218
+ }
219
+
220
+ function parseOptionalFloat(value?: string): number | undefined {
221
+ if (value == null || value === '') return undefined;
222
+ return parseFloat(value);
223
+ }
224
+
225
+ function parseOptionalBool(value?: string): boolean | undefined {
226
+ if (value == null || value === '') return undefined;
227
+ return value === 'true';
228
+ }
229
+
230
+ export function get_profile(env: BenchmarkProfileEnv): ParsedBenchmarkProfile {
231
+ const profileName = env.BENCHMARK_PROFILE;
232
+ const { name, profile } = getBenchmarkProfile(profileName);
233
+ const context = resolveBenchmarkContext(name, {
234
+ ...(parseOptionalFloat(env.DELAY) !== undefined ? { delay: parseOptionalFloat(env.DELAY)! } : {}),
235
+ ...(parseOptionalFloat(env.DELAY_JITTER_RATIO) !== undefined
236
+ ? { delay_jitter_ratio: parseOptionalFloat(env.DELAY_JITTER_RATIO)! }
237
+ : {}),
238
+ ...(parseOptionalInt(env.EXPAND) !== undefined ? { expand: parseOptionalInt(env.EXPAND)! } : {}),
239
+ ...(parseOptionalInt(env.STEPS) !== undefined ? { steps: parseOptionalInt(env.STEPS)! } : {}),
240
+ ...(parseOptionalInt(env.CHECKPOINT_SIZE) !== undefined ? { checkpoint_size: parseOptionalInt(env.CHECKPOINT_SIZE)! } : {}),
241
+ ...(parseOptionalBool(env.LLM_ENABLED) !== undefined ? { llm_enabled: parseOptionalBool(env.LLM_ENABLED)! } : {}),
242
+ ...(parseOptionalInt(env.STREAM_SIZE) !== undefined ? { stream_size: parseOptionalInt(env.STREAM_SIZE)! } : {}),
243
+ ...(parseOptionalInt(env.CHUNK_SIZE) !== undefined ? { chunk_size: parseOptionalInt(env.CHUNK_SIZE)! } : {}),
244
+ ...(parseOptionalBool(env.BURST_MODE) !== undefined ? { burst_mode: parseOptionalBool(env.BURST_MODE)! } : {}),
245
+ ...(parseOptionalFloat(env.BURST_PROBABILITY) !== undefined
246
+ ? { burst_probability: parseOptionalFloat(env.BURST_PROBABILITY)! }
247
+ : {}),
248
+ ...(parseOptionalInt(env.BURST_SIZE) !== undefined ? { burst_size: parseOptionalInt(env.BURST_SIZE)! } : {}),
249
+ });
250
+
251
+ return {
252
+ name,
253
+ benchmarkType: env.BENCHMARK_TYPE || 'wait_write',
254
+ runMode: env.RUN_MODE ? (env.RUN_MODE === 'stateful' ? 'stateful' : 'stateless') : profile.capacity.runMode,
255
+ resumable: env.STREAM_RESUMABLE != null && env.STREAM_RESUMABLE !== ''
256
+ ? parseOptionalBool(env.STREAM_RESUMABLE) ?? profile.resumable
257
+ : profile.resumable,
258
+ context,
259
+ capacity: profile.capacity,
260
+ };
261
+ }
262
+
263
+
@@ -6,7 +6,6 @@ import { EnqueuedRunsOrder } from './enqueued_runs_order.js';
6
6
  import { CancelFirstSecondCompletes } from './cancel_first_second_completes.js';
7
7
  import { ThreadRunsMetadataSearch } from './thread_runs_metadata_search.js';
8
8
  import { ThreadsSearchMetadata } from './threads_search_metadata.js';
9
- import { RandomStream } from './random_stream.js';
10
9
  import { MetaWorkload } from './meta_workload.js';
11
10
  import type { BenchmarkRunner } from './benchmark-runner.js';
12
11
 
@@ -29,8 +28,6 @@ export class Benchmarks {
29
28
  return ThreadRunsMetadataSearch;
30
29
  case ThreadsSearchMetadata.toString():
31
30
  return ThreadsSearchMetadata;
32
- case RandomStream.toString():
33
- return RandomStream;
34
31
  case MetaWorkload.toString():
35
32
  return MetaWorkload;
36
33
  default:
@@ -3,7 +3,7 @@ import type { ErrorMetrics } from './benchmark-runner.js';
3
3
  import { check } from 'k6';
4
4
  import http from 'k6/http';
5
5
  import type { BenchmarkResult, BenchmarkGraphOptions } from './types.js';
6
- import { DEFAULT_GRAPH_ID, JOIN_TIMEOUT } from './types.js';
6
+ import { JOIN_TIMEOUT } from './types.js';
7
7
  import { addResponse, failResult, okResult } from './types.js';
8
8
  import { logFailure } from './log-failure.js';
9
9
 
@@ -19,12 +19,13 @@ export class CancelFirstSecondCompletes extends BenchmarkRunner {
19
19
  static run(
20
20
  baseUrl: string,
21
21
  requestParams: Record<string, unknown>,
22
- benchmarkGraphOptions?: BenchmarkGraphOptions
22
+ benchmarkGraphOptions: BenchmarkGraphOptions
23
23
  ): BenchmarkResult<CancelFirstSecondCompletesData> {
24
- const graphId = benchmarkGraphOptions?.graph_id ?? DEFAULT_GRAPH_ID;
24
+ const graphId = benchmarkGraphOptions.graph_id;
25
25
  const longDelaySec = 3;
26
26
  const responses: Record<string, import('./types.js').HttpResponse> = {};
27
27
  const joinParams = { ...requestParams, timeout: JOIN_TIMEOUT };
28
+ const baseContext = benchmarkGraphOptions.context;
28
29
 
29
30
  const createThreadRes = http.post(`${baseUrl}/threads`, '{}', requestParams);
30
31
  addResponse(responses, 'create_thread', createThreadRes);
@@ -35,7 +36,8 @@ export class CancelFirstSecondCompletes extends BenchmarkRunner {
35
36
 
36
37
  const run1Payload = JSON.stringify({
37
38
  assistant_id: graphId,
38
- input: { mode: 'single', delay: longDelaySec, expand: 1, steps: 1 },
39
+ input: {},
40
+ context: { ...baseContext, delay: longDelaySec, expand: 1, steps: 1 },
39
41
  config: { recursion_limit: 5 },
40
42
  });
41
43
  const run1Res = http.post(`${baseUrl}/threads/${threadId}/runs`, run1Payload, requestParams);
@@ -47,7 +49,8 @@ export class CancelFirstSecondCompletes extends BenchmarkRunner {
47
49
 
48
50
  const run2Payload = JSON.stringify({
49
51
  assistant_id: graphId,
50
- input: { mode: 'single', delay: 0, expand: 1, steps: 1 },
52
+ input: {},
53
+ context: { ...baseContext, delay: 0, expand: 1, steps: 1 },
51
54
  config: { recursion_limit: 5 },
52
55
  multitask_strategy: 'enqueue',
53
56
  });
@@ -85,7 +88,7 @@ export class CancelFirstSecondCompletes extends BenchmarkRunner {
85
88
  static validate(
86
89
  result: BenchmarkResult<CancelFirstSecondCompletesData>,
87
90
  errorMetrics: ErrorMetrics,
88
- _benchmarkGraphOptions?: BenchmarkGraphOptions
91
+ _benchmarkGraphOptions: BenchmarkGraphOptions
89
92
  ): boolean {
90
93
  if (!result.ok) {
91
94
  logFailure(CancelFirstSecondCompletes.toString(), result);
@@ -3,7 +3,7 @@ import type { ErrorMetrics } from './benchmark-runner.js';
3
3
  import { check } from 'k6';
4
4
  import http from 'k6/http';
5
5
  import type { BenchmarkResult, BenchmarkGraphOptions } from './types.js';
6
- import { DEFAULT_GRAPH_ID, DEFAULT_INPUT, JOIN_TIMEOUT, NUM_ENQUEUED_RUNS } from './types.js';
6
+ import { JOIN_TIMEOUT, NUM_ENQUEUED_RUNS } from './types.js';
7
7
  import { addResponse, failResult, okResult } from './types.js';
8
8
  import { logFailure } from './log-failure.js';
9
9
 
@@ -17,11 +17,13 @@ export class EnqueuedRunsOrder extends BenchmarkRunner {
17
17
  static run(
18
18
  baseUrl: string,
19
19
  requestParams: Record<string, unknown>,
20
- benchmarkGraphOptions?: BenchmarkGraphOptions
20
+ benchmarkGraphOptions: BenchmarkGraphOptions
21
21
  ): BenchmarkResult<EnqueuedRunsOrderData> {
22
- const graphId = benchmarkGraphOptions?.graph_id ?? DEFAULT_GRAPH_ID;
22
+ const graphId = benchmarkGraphOptions.graph_id;
23
23
  const responses: Record<string, import('./types.js').HttpResponse> = {};
24
24
  const joinParams = { ...requestParams, timeout: JOIN_TIMEOUT } as Record<string, unknown>;
25
+ const context = benchmarkGraphOptions.context;
26
+ const recursion_limit = Math.max(context.expand, context.steps) + 2;
25
27
 
26
28
  const createThreadRes = http.post(`${baseUrl}/threads`, '{}', requestParams);
27
29
  addResponse(responses, 'create_thread', createThreadRes);
@@ -34,8 +36,9 @@ export class EnqueuedRunsOrder extends BenchmarkRunner {
34
36
  for (let i = 0; i < NUM_ENQUEUED_RUNS; i++) {
35
37
  const payload = JSON.stringify({
36
38
  assistant_id: graphId,
37
- input: benchmarkGraphOptions?.input ?? DEFAULT_INPUT,
38
- config: { recursion_limit: 5 },
39
+ input: {},
40
+ context,
41
+ config: { recursion_limit },
39
42
  multitask_strategy: 'enqueue',
40
43
  });
41
44
  const createRunRes = http.post(`${baseUrl}/threads/${threadId}/runs`, payload, requestParams);
@@ -64,7 +67,7 @@ export class EnqueuedRunsOrder extends BenchmarkRunner {
64
67
  static validate(
65
68
  result: BenchmarkResult<EnqueuedRunsOrderData>,
66
69
  errorMetrics: ErrorMetrics,
67
- _benchmarkGraphOptions?: BenchmarkGraphOptions
70
+ _benchmarkGraphOptions: BenchmarkGraphOptions
68
71
  ): boolean {
69
72
  if (!result.ok) {
70
73
  logFailure(EnqueuedRunsOrder.toString(), result);
@@ -10,7 +10,6 @@ import { EnqueuedRunsOrder } from './enqueued_runs_order.js';
10
10
  import { CancelFirstSecondCompletes } from './cancel_first_second_completes.js';
11
11
  import { ThreadRunsMetadataSearch } from './thread_runs_metadata_search.js';
12
12
  import { ThreadsSearchMetadata } from './threads_search_metadata.js';
13
- import { RandomStream } from './random_stream.js';
14
13
 
15
14
  const OTHER_RUNNERS = [
16
15
  WaitWrite,
@@ -21,7 +20,6 @@ const OTHER_RUNNERS = [
21
20
  CancelFirstSecondCompletes,
22
21
  ThreadRunsMetadataSearch,
23
22
  ThreadsSearchMetadata,
24
- RandomStream,
25
23
  ];
26
24
 
27
25
  interface MetaWorkloadData {
@@ -34,14 +32,14 @@ export class MetaWorkload extends BenchmarkRunner {
34
32
  static run(
35
33
  baseUrl: string,
36
34
  requestParams: Record<string, unknown>,
37
- benchmarkGraphOptions?: BenchmarkGraphOptions
35
+ benchmarkGraphOptions: BenchmarkGraphOptions
38
36
  ): BenchmarkResult<MetaWorkloadData> {
39
37
  const Runner = OTHER_RUNNERS[Math.floor(Math.random() * OTHER_RUNNERS.length)];
40
38
  const innerResult = Runner.run(baseUrl, requestParams, benchmarkGraphOptions) as BenchmarkResult;
41
39
  return {
42
40
  ok: innerResult.ok,
43
41
  step: innerResult.step,
44
- responses: innerResult.responses ?? {},
42
+ responses: innerResult.responses,
45
43
  data: { type: Runner.toString(), result: innerResult, Runner },
46
44
  };
47
45
  }
@@ -49,7 +47,7 @@ export class MetaWorkload extends BenchmarkRunner {
49
47
  static validate(
50
48
  result: BenchmarkResult<MetaWorkloadData>,
51
49
  errorMetrics: ErrorMetrics,
52
- benchmarkGraphOptions?: BenchmarkGraphOptions
50
+ benchmarkGraphOptions: BenchmarkGraphOptions
53
51
  ): boolean {
54
52
  const d = result.data;
55
53
  if (!d) {