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.
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/PKG-INFO +1 -1
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/.gitignore +0 -2
- langgraph_api-0.12.0.dev12/benchmark/Makefile +30 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/README.md +1 -33
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/benchmark_profiles.ts +8 -42
- langgraph_api-0.12.0.dev12/langgraph_api/__init__.py +1 -0
- langgraph_api-0.12.0.dev11/benchmark/Makefile +0 -93
- langgraph_api-0.12.0.dev11/benchmark/capacity_dd_report.py +0 -96
- langgraph_api-0.12.0.dev11/benchmark/capacity_k6.js +0 -166
- langgraph_api-0.12.0.dev11/benchmark/capacity_runner.mjs +0 -390
- langgraph_api-0.12.0.dev11/benchmark/capacity_slack_report.py +0 -417
- langgraph_api-0.12.0.dev11/benchmark/capacity_urls.mjs +0 -9
- langgraph_api-0.12.0.dev11/benchmark/mixed_workload_k6.js +0 -290
- langgraph_api-0.12.0.dev11/benchmark/mixed_workload_runner.mjs +0 -171
- langgraph_api-0.12.0.dev11/benchmark/reporting/slack_slowest_runs.py +0 -244
- langgraph_api-0.12.0.dev11/benchmark/reporting/slack_summary.py +0 -309
- langgraph_api-0.12.0.dev11/benchmark/run_local.sh +0 -27
- langgraph_api-0.12.0.dev11/langgraph_api/__init__.py +0 -1
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/.gitignore +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/LICENSE +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/Makefile +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/README.md +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/assistant.ts +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/benchmark-runner.ts +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/benchmarks.ts +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/cancel_first_second_completes.ts +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/enqueued_runs_order.ts +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/log-failure.ts +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/meta_workload.ts +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/stream_write.ts +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/thread.ts +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/thread_runs_metadata_search.ts +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/threads_search_metadata.ts +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/types.ts +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/benchmark-runners/wait_write.ts +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/clean-cli.js +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/clean.js +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/continuous/README.md +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/continuous/pyproject.toml +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/continuous/runner.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/continuous/uv.lock +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/graphs.js +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/package.json +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/ramp.js +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/reporting/dd_reporting.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/staircase.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/staircase_step_k6.js +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/tsconfig.json +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/update-revision.js +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/benchmark/weather.js +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/constraints.txt +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/custom_store.sql +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/forbidden.txt +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/hatch_build.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/healthcheck.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph-cloud-debugging-20260210132856.zip +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/_checkpointer/__init__.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/_checkpointer/_adapter.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/_checkpointer/protocol.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/_factory_utils.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/__init__.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/a2a.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/assistants.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/event_streaming.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/mcp/__init__.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/mcp/_constants.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/mcp/_handlers.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/mcp/_models.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/mcp/_routes.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/mcp/_sanitizers.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/meta.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/openapi.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/profile.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/runs.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/store.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/threads.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/api/ui.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/asgi_transport.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/asyncio.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/auth/__init__.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/auth/custom.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/auth/errors.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/auth/langsmith/__init__.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/auth/langsmith/backend.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/auth/langsmith/client.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/auth/middleware.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/auth/noop.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/auth/studio_user.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/cache.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/cli.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/command.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/config/__init__.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/config/_parse.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/config/schemas.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/cron_scheduler.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/encryption/__init__.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/encryption/aes_json.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/encryption/context.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/encryption/custom.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/encryption/middleware.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/encryption/shared.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/errors.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/event_streaming/__init__.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/event_streaming/capabilities.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/event_streaming/constants.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/event_streaming/event_normalizers.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/event_streaming/namespace.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/event_streaming/service.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/event_streaming/session.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/event_streaming/state_normalizers.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/event_streaming/types.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/feature_flags.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/graph.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/__init__.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/client.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/ops/__init__.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/ops/assistants.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/ops/cache.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/ops/crons.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/ops/runs.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/ops/threads.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/server.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/servicers/__init__.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/servicers/checkpointer.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/grpc/servicers/encryption.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/http.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/http_metrics.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/http_metrics_utils.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/.gitignore +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/.prettierrc +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/__init__.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/base.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/build.mts +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/client.http.mts +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/client.mts +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/errors.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/global.d.ts +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/package.json +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/remote.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/schema.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/src/graph.mts +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/src/load.hooks.mjs +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/src/preload.mjs +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/src/utils/experiment-tracing.mts +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/src/utils/files.mts +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/src/utils/importMap.mts +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/src/utils/serde.mts +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/sse.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/traceblock.mts +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/tsconfig.json +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/ui.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/js/yarn.lock +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/lc_security/__init__.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/lc_security/exceptions.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/lc_security/policy.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/lc_security/transport.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/logging.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/metadata.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/metrics_collector.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/metrics_otlp.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/middleware/__init__.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/middleware/ensure_store.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/middleware/http_logger.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/middleware/private_network.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/middleware/request_id.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/models/__init__.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/models/run.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/otel_context.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/patch.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/queue_entrypoint.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/release_tags.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/route.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/schema.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/self_hosted_logs.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/self_hosted_metrics.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/serde.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/server.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/sse.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/state.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/store.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/stream.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/stream_v2.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/timing/__init__.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/timing/profiler.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/timing/timer.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/traceblock.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/tunneling/cloudflare.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/utils/__init__.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/utils/cache.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/utils/config.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/utils/errors.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/utils/extract.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/utils/future.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/utils/headers.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/utils/network.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/utils/retriable_client.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/utils/stream_codec.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/utils/uuids.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/validation.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/webhook.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_api/worker.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/__init__.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/checkpointer.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/conversion/__init__.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/conversion/_compat.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/conversion/checkpoint.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/conversion/config.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/conversion/durability.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/conversion/struct.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/conversion/value.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/__init__.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/checkpointer_pb2.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/core_api_pb2.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/core_api_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/encryption_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/engine_common_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
- {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
- {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
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
- {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
- {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
- {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
- {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
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
- {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
- {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
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/errors_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_grpc_common/serde.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_license/__init__.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_license/validation.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_runtime/__init__.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_runtime/checkpoint.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_runtime/database.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_runtime/lifespan.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_runtime/metrics.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_runtime/ops.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_runtime/queue.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_runtime/retry.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_runtime/routes.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/langgraph_runtime/store.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/logging.json +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/openapi.json +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/pyproject.toml +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/scripts/build_wheel.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/scripts/create_license.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/scripts/run_a2a_tck.py +0 -0
- {langgraph_api-0.12.0.dev11 → langgraph_api-0.12.0.dev12}/uv.lock +0 -0
|
@@ -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
|
-
- `
|
|
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
|
-
|
|
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.
|
|
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
|
-
}
|