langgraph-api 0.7.90__tar.gz → 0.7.92__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.7.90 → langgraph_api-0.7.92}/PKG-INFO +2 -1
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/Makefile +0 -5
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/README.md +5 -14
- langgraph_api-0.7.92/langgraph_api/__init__.py +1 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/graph.py +38 -1
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/js/remote.py +61 -6
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/utils/config.py +1 -1
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/utils/stream_codec.py +22 -14
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/pyproject.toml +1 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/uv.lock +53 -51
- langgraph_api-0.7.90/benchmark/burst.js +0 -219
- langgraph_api-0.7.90/langgraph_api/__init__.py +0 -1
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/.gitignore +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/LICENSE +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/Makefile +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/README.md +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/.gitignore +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/benchmark-runners/assistant.ts +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/benchmark-runners/benchmark-runner.ts +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/benchmark-runners/benchmarks.ts +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/benchmark-runners/cancel_first_second_completes.ts +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/benchmark-runners/enqueued_runs_order.ts +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/benchmark-runners/log-failure.ts +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/benchmark-runners/meta_workload.ts +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/benchmark-runners/random_stream.ts +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/benchmark-runners/stream_write.ts +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/benchmark-runners/thread.ts +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/benchmark-runners/thread_runs_metadata_search.ts +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/benchmark-runners/threads_search_metadata.ts +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/benchmark-runners/types.ts +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/benchmark-runners/wait_write.ts +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/capacity_dd_report.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/capacity_k6.js +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/capacity_runner.mjs +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/capacity_slack_report.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/capacity_urls.mjs +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/clean-cli.js +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/clean.js +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/continuous/README.md +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/continuous/pyproject.toml +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/continuous/runner.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/continuous/uv.lock +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/graphs.js +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/mixed_workload_k6.js +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/mixed_workload_runner.mjs +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/package.json +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/ramp.js +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/reporting/dd_reporting.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/reporting/slack_slowest_runs.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/reporting/slack_summary.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/run_local.sh +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/staircase.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/staircase_step_k6.js +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/tsconfig.json +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/update-revision.js +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/benchmark/weather.js +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/constraints.txt +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/custom_store.sql +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/forbidden.txt +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/hatch_build.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/healthcheck.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph-cloud-debugging-20260210132856.zip +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/_checkpointer/__init__.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/_checkpointer/_adapter.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/_checkpointer/protocol.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/_factory_utils.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/api/__init__.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/api/a2a.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/api/assistants.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/api/mcp/__init__.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/api/mcp/_constants.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/api/mcp/_handlers.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/api/mcp/_models.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/api/mcp/_routes.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/api/mcp/_sanitizers.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/api/meta.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/api/openapi.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/api/profile.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/api/runs.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/api/store.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/api/threads.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/api/ui.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/asgi_transport.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/asyncio.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/auth/__init__.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/auth/custom.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/auth/errors.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/auth/langsmith/__init__.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/auth/langsmith/backend.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/auth/langsmith/client.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/auth/middleware.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/auth/noop.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/auth/studio_user.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/cache.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/cli.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/command.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/config/__init__.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/config/_parse.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/config/schemas.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/cron_scheduler.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/encryption/__init__.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/encryption/aes_json.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/encryption/context.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/encryption/custom.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/encryption/middleware.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/encryption/shared.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/errors.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/executor_entrypoint.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/feature_flags.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/grpc/__init__.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/grpc/client.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/grpc/ops/__init__.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/grpc/ops/assistants.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/grpc/ops/cache.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/grpc/ops/crons.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/grpc/ops/runs.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/grpc/ops/threads.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/grpc/server.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/grpc/servicers/__init__.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/grpc/servicers/checkpointer.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/grpc/servicers/encryption.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/http.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/http_metrics.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/http_metrics_utils.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/js/.gitignore +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/js/.prettierrc +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/js/__init__.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/js/base.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/js/build.mts +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/js/client.http.mts +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/js/client.mts +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/js/errors.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/js/global.d.ts +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/js/package.json +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/js/schema.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/js/src/graph.mts +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/js/src/load.hooks.mjs +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/js/src/preload.mjs +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/js/src/utils/files.mts +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/js/src/utils/importMap.mts +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/js/src/utils/serde.mts +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/js/sse.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/js/traceblock.mts +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/js/tsconfig.json +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/js/ui.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/js/yarn.lock +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/logging.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/metadata.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/metrics_datadog.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/middleware/__init__.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/middleware/ensure_store.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/middleware/http_logger.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/middleware/private_network.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/middleware/request_id.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/models/__init__.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/models/run.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/otel_context.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/patch.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/queue_entrypoint.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/route.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/schema.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/self_hosted_logs.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/self_hosted_metrics.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/serde.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/server.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/sse.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/state.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/store.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/stream.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/timing/__init__.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/timing/profiler.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/timing/timer.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/traceblock.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/tunneling/cloudflare.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/utils/__init__.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/utils/cache.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/utils/errors.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/utils/extract.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/utils/future.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/utils/headers.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/utils/retriable_client.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/utils/uuids.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/validation.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/webhook.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_api/worker.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/__init__.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/checkpointer.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/conversion/__init__.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/conversion/_compat.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/conversion/channel.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/conversion/checkpoint.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/conversion/config.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/conversion/durability.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/conversion/exception.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/conversion/graph.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/conversion/interrupt.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/conversion/messages.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/conversion/orchestrator_response.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/conversion/runopts.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/conversion/stream_mode.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/conversion/struct.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/conversion/task.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/conversion/value.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/__init__.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/checkpointer_pb2.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/core_api_pb2.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/core_api_pb2.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/encryption_pb2.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/engine_api_pb2.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/engine_api_pb2.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/engine_api_pb2_grpc.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/engine_api_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/engine_common_pb2.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2_grpc.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/errors_pb2_grpc.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/executor_api_pb2.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/executor_api_pb2.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/executor_api_pb2_grpc.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/proto/executor_api_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/sanitize.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_grpc_common/serde.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_license/__init__.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_license/validation.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_runtime/__init__.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_runtime/checkpoint.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_runtime/database.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_runtime/lifespan.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_runtime/metrics.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_runtime/ops.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_runtime/queue.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_runtime/retry.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_runtime/routes.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/langgraph_runtime/store.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/logging.json +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/openapi.json +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/scripts/build_wheel.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/scripts/create_license.py +0 -0
- {langgraph_api-0.7.90 → langgraph_api-0.7.92}/scripts/run_a2a_tck.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: langgraph-api
|
|
3
|
-
Version: 0.7.
|
|
3
|
+
Version: 0.7.92
|
|
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
|
|
@@ -32,6 +32,7 @@ Requires-Dist: truststore>=0.1
|
|
|
32
32
|
Requires-Dist: uuid-utils>=0.12.0
|
|
33
33
|
Requires-Dist: uvicorn>=0.26.0
|
|
34
34
|
Requires-Dist: watchfiles>=0.13
|
|
35
|
+
Requires-Dist: zstandard>=0.23.0
|
|
35
36
|
Description-Content-Type: text/markdown
|
|
36
37
|
|
|
37
38
|
# LangGraph API
|
|
@@ -6,11 +6,8 @@ K6 is a modern load testing tool that allows you to test the performance and rel
|
|
|
6
6
|
|
|
7
7
|
### Available Tests
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
1. `
|
|
11
|
-
Available Params:
|
|
12
|
-
BURST_SIZE - How many requests to run. Default: 100
|
|
13
|
-
2. `Ramp` - Scale up the number of /run/wait requests and then plateau.
|
|
9
|
+
Available test:
|
|
10
|
+
1. `Ramp` - Scale up the number of /run/wait requests and then plateau.
|
|
14
11
|
Available Params:
|
|
15
12
|
LOAD_SIZE - How much traffic to ramp up over a 60s period. Default: 500
|
|
16
13
|
LEVELS - The number of times to ramp up. Default: 2
|
|
@@ -45,17 +42,11 @@ Available Params:
|
|
|
45
42
|
### Basic Usage
|
|
46
43
|
|
|
47
44
|
```bash
|
|
48
|
-
# Run burst test with default burst size
|
|
49
|
-
make benchmark-burst
|
|
50
|
-
|
|
51
|
-
# Run burst test with custom burst size
|
|
52
|
-
BURST_SIZE=500 make benchmark-burst
|
|
53
|
-
|
|
54
45
|
# Run ramp test with a different mode and expand size
|
|
55
46
|
MODE='parallel' EXPAND=100 make benchmark-ramp
|
|
56
47
|
|
|
57
|
-
# Run
|
|
58
|
-
BASE_URL=https://jdr-benchmark-1cfe27c4cd375e1c999f02f186f617f6.us.langgraph.app make benchmark-
|
|
48
|
+
# Run ramp test against a deployment
|
|
49
|
+
BASE_URL=https://jdr-benchmark-1cfe27c4cd375e1c999f02f186f617f6.us.langgraph.app make benchmark-ramp
|
|
59
50
|
|
|
60
51
|
# Clean up result files
|
|
61
52
|
make benchmark-clean
|
|
@@ -63,7 +54,7 @@ make benchmark-clean
|
|
|
63
54
|
|
|
64
55
|
### Output
|
|
65
56
|
|
|
66
|
-
Summary results are written to stdout and persisted in a
|
|
57
|
+
Summary results are written to stdout and persisted in a summary file. More detailed results for the same run are persisted in a results file.
|
|
67
58
|
|
|
68
59
|
Charts can be created from the run locally using the `make benchmark-charts` command.
|
|
69
60
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.7.92"
|
|
@@ -480,7 +480,7 @@ async def collect_graphs_from_env(register: bool = False) -> None:
|
|
|
480
480
|
for task in js_bg_tasks:
|
|
481
481
|
task.add_done_callback(_handle_exception)
|
|
482
482
|
|
|
483
|
-
await wait_until_js_ready()
|
|
483
|
+
await wait_until_js_ready(js_bg_tasks)
|
|
484
484
|
|
|
485
485
|
for spec in js_specs:
|
|
486
486
|
graph = RemotePregel(graph_id=spec.id)
|
|
@@ -526,6 +526,43 @@ def _metadata_fn(spec: GraphSpec) -> dict[str, Any]:
|
|
|
526
526
|
return {"graph_id": spec.id, "module": spec.module, "path": spec.path}
|
|
527
527
|
|
|
528
528
|
|
|
529
|
+
def patch_packages_distributions() -> None:
|
|
530
|
+
"""Cache importlib.metadata.packages_distributions() to avoid repeated full scans.
|
|
531
|
+
|
|
532
|
+
google-api-core >=2.28.0 calls packages_distributions() — an uncached O(N)
|
|
533
|
+
scan of every installed package's RECORD file — 13+ times at import time
|
|
534
|
+
(once per google.cloud.* sub-package). With ddtrace's import hooks each
|
|
535
|
+
call takes ~13 s in production, totalling ~170 s.
|
|
536
|
+
|
|
537
|
+
The installed-package set never changes during a process lifetime, so a
|
|
538
|
+
single cached result is safe and reduces 13 scans to 1.
|
|
539
|
+
|
|
540
|
+
Controlled by LSD_CACHE_PACKAGES_DISTRIBUTIONS (default "false").
|
|
541
|
+
Set to "true" to enable.
|
|
542
|
+
"""
|
|
543
|
+
if os.environ.get("LSD_CACHE_PACKAGES_DISTRIBUTIONS", "false").lower() != "true":
|
|
544
|
+
return
|
|
545
|
+
|
|
546
|
+
import importlib.metadata # noqa: PLC0415
|
|
547
|
+
|
|
548
|
+
if getattr(importlib.metadata.packages_distributions, "_cached", False):
|
|
549
|
+
return
|
|
550
|
+
|
|
551
|
+
logger.info("Caching importlib.metadata.packages_distributions()")
|
|
552
|
+
|
|
553
|
+
original = importlib.metadata.packages_distributions
|
|
554
|
+
cache: dict | None = None
|
|
555
|
+
|
|
556
|
+
def _cached():
|
|
557
|
+
nonlocal cache
|
|
558
|
+
if cache is None:
|
|
559
|
+
cache = original()
|
|
560
|
+
return cache
|
|
561
|
+
|
|
562
|
+
_cached._cached = True
|
|
563
|
+
importlib.metadata.packages_distributions = _cached
|
|
564
|
+
|
|
565
|
+
|
|
529
566
|
@timing.timer(
|
|
530
567
|
message="Importing graph with id {graph_id}",
|
|
531
568
|
metadata_fn=_metadata_fn,
|
|
@@ -414,8 +414,19 @@ async def run_js_process(paths_str: str | None, watch: bool = False):
|
|
|
414
414
|
**os.environ,
|
|
415
415
|
},
|
|
416
416
|
)
|
|
417
|
-
logger.info(
|
|
417
|
+
logger.info(
|
|
418
|
+
"Started JS graphs process",
|
|
419
|
+
pid=process.pid,
|
|
420
|
+
attempt=attempt,
|
|
421
|
+
args=args,
|
|
422
|
+
)
|
|
418
423
|
code = await process.wait()
|
|
424
|
+
logger.error(
|
|
425
|
+
"JS graphs process exited unexpectedly",
|
|
426
|
+
pid=process.pid,
|
|
427
|
+
exit_code=code,
|
|
428
|
+
attempt=attempt,
|
|
429
|
+
)
|
|
419
430
|
raise Exception(f"JS process exited with code {code}")
|
|
420
431
|
except asyncio.CancelledError:
|
|
421
432
|
logger.info("Terminating JS graphs process")
|
|
@@ -462,9 +473,20 @@ async def run_js_http_process(
|
|
|
462
473
|
)
|
|
463
474
|
|
|
464
475
|
pid = process.pid
|
|
465
|
-
logger.info(
|
|
476
|
+
logger.info(
|
|
477
|
+
"Started JS HTTP process",
|
|
478
|
+
pid=pid,
|
|
479
|
+
attempt=attempt,
|
|
480
|
+
args=args,
|
|
481
|
+
)
|
|
466
482
|
|
|
467
483
|
code = await process.wait()
|
|
484
|
+
logger.error(
|
|
485
|
+
"JS HTTP process exited unexpectedly",
|
|
486
|
+
pid=pid,
|
|
487
|
+
exit_code=code,
|
|
488
|
+
attempt=attempt,
|
|
489
|
+
)
|
|
468
490
|
raise Exception(f"JS HTTP process exited with code {code}")
|
|
469
491
|
|
|
470
492
|
except asyncio.CancelledError:
|
|
@@ -806,7 +828,9 @@ class DisableHttpxLoggingContextManager(contextlib.AbstractContextManager):
|
|
|
806
828
|
logging.getLogger("httpx").removeFilter(self.filter)
|
|
807
829
|
|
|
808
830
|
|
|
809
|
-
async def wait_until_js_ready(
|
|
831
|
+
async def wait_until_js_ready(
|
|
832
|
+
bg_tasks: set[asyncio.Task] | None = None,
|
|
833
|
+
):
|
|
810
834
|
with DisableHttpxLoggingContextManager():
|
|
811
835
|
async with (
|
|
812
836
|
httpx.AsyncClient(
|
|
@@ -821,19 +845,50 @@ async def wait_until_js_ready():
|
|
|
821
845
|
) as checkpointer_client,
|
|
822
846
|
):
|
|
823
847
|
attempt = 0
|
|
848
|
+
graph_ready = False
|
|
824
849
|
while (
|
|
825
850
|
current_task := asyncio.current_task()
|
|
826
851
|
) and not current_task.cancelled():
|
|
852
|
+
if bg_tasks:
|
|
853
|
+
for task in bg_tasks:
|
|
854
|
+
if task.done():
|
|
855
|
+
exc = task.exception() if not task.cancelled() else None
|
|
856
|
+
logger.error(
|
|
857
|
+
"JS background task finished while waiting for"
|
|
858
|
+
" JS ready",
|
|
859
|
+
task_name=task.get_name(),
|
|
860
|
+
task_cancelled=task.cancelled(),
|
|
861
|
+
task_exception=repr(exc) if exc else None,
|
|
862
|
+
)
|
|
863
|
+
raise RuntimeError(
|
|
864
|
+
f"JS background task '{task.get_name()}' died"
|
|
865
|
+
" during startup"
|
|
866
|
+
) from exc
|
|
827
867
|
try:
|
|
828
|
-
|
|
829
|
-
|
|
868
|
+
if not graph_ready:
|
|
869
|
+
res = await graph_client.get("/ok")
|
|
870
|
+
res.raise_for_status()
|
|
871
|
+
graph_ready = True
|
|
830
872
|
res = await checkpointer_client.get("/ok")
|
|
831
873
|
res.raise_for_status()
|
|
832
874
|
return
|
|
833
|
-
except httpx.HTTPError:
|
|
875
|
+
except httpx.HTTPError as exc:
|
|
834
876
|
if attempt > 240:
|
|
877
|
+
logger.exception(
|
|
878
|
+
"Timed out waiting for JS process to become ready",
|
|
879
|
+
attempts=attempt,
|
|
880
|
+
graph_ready=graph_ready,
|
|
881
|
+
)
|
|
835
882
|
raise
|
|
836
883
|
else:
|
|
884
|
+
if attempt % 20 == 0 and attempt > 0:
|
|
885
|
+
logger.warning(
|
|
886
|
+
"Still waiting for JS process to become ready",
|
|
887
|
+
attempts=attempt,
|
|
888
|
+
elapsed_seconds=attempt * 0.5,
|
|
889
|
+
graph_ready=graph_ready,
|
|
890
|
+
last_error=repr(exc),
|
|
891
|
+
)
|
|
837
892
|
attempt += 1
|
|
838
893
|
await asyncio.sleep(0.5)
|
|
839
894
|
|
|
@@ -41,7 +41,7 @@ COPIABLE_KEYS = [
|
|
|
41
41
|
"configurable",
|
|
42
42
|
]
|
|
43
43
|
|
|
44
|
-
DEFAULT_RECURSION_LIMIT = int(getenv("LANGGRAPH_DEFAULT_RECURSION_LIMIT", "
|
|
44
|
+
DEFAULT_RECURSION_LIMIT = int(getenv("LANGGRAPH_DEFAULT_RECURSION_LIMIT", "10011"))
|
|
45
45
|
|
|
46
46
|
T = TypeVar("T")
|
|
47
47
|
P = ParamSpec("P")
|
|
@@ -5,10 +5,11 @@ from dataclasses import dataclass
|
|
|
5
5
|
|
|
6
6
|
import orjson
|
|
7
7
|
import structlog
|
|
8
|
+
import zstandard
|
|
8
9
|
|
|
9
10
|
PROTOCOL_VERSION = 1
|
|
11
|
+
PROTOCOL_VERSION_COMPRESSED = 2
|
|
10
12
|
"""
|
|
11
|
-
---
|
|
12
13
|
Version 1:
|
|
13
14
|
Byte Offsets
|
|
14
15
|
0 1 3 5 5+N 5+N+M
|
|
@@ -17,6 +18,8 @@ Byte Offsets
|
|
|
17
18
|
+--------+------------------+----------------+------------------+------------------+--------------------+
|
|
18
19
|
1 B 2 B 2 B N B M B variable
|
|
19
20
|
|
|
21
|
+
Version 2: Same header layout as v1, but message is zstd-compressed.
|
|
22
|
+
|
|
20
23
|
---- Old (to be dropped soon / multiple formats)
|
|
21
24
|
Version 0 (old):
|
|
22
25
|
1) b"$:" + <stream_id> + b"$:" + <event> + b"$:" + <raw_json>
|
|
@@ -27,6 +30,8 @@ BYTE_MASK = 0xFF
|
|
|
27
30
|
HEADER_LEN = 5
|
|
28
31
|
logger = structlog.stdlib.get_logger(__name__)
|
|
29
32
|
|
|
33
|
+
_zstd_decompressor = zstandard.ZstdDecompressor()
|
|
34
|
+
|
|
30
35
|
|
|
31
36
|
class StreamFormatError(ValueError):
|
|
32
37
|
"""Raised when a stream frame fails validation."""
|
|
@@ -67,12 +72,9 @@ class StreamPacket:
|
|
|
67
72
|
|
|
68
73
|
|
|
69
74
|
class StreamCodec:
|
|
70
|
-
"""
|
|
71
|
-
|
|
72
|
-
__slots__ = ("_version",)
|
|
75
|
+
"""Encodes v1 stream frames and decodes any supported version (v1, v2)."""
|
|
73
76
|
|
|
74
|
-
|
|
75
|
-
self._version = protocol_version & BYTE_MASK
|
|
77
|
+
__slots__ = ()
|
|
76
78
|
|
|
77
79
|
def encode(
|
|
78
80
|
self,
|
|
@@ -86,11 +88,8 @@ class StreamCodec:
|
|
|
86
88
|
event_bytes = event.encode("utf-8")
|
|
87
89
|
if len(event_bytes) > 0xFFFF:
|
|
88
90
|
raise StreamFormatError("event exceeds 65535 bytes; cannot encode")
|
|
89
|
-
if not event_bytes:
|
|
90
|
-
raise StreamFormatError("event cannot be empty")
|
|
91
91
|
|
|
92
92
|
if stream_id:
|
|
93
|
-
# It's a resumable stream
|
|
94
93
|
stream_id_bytes = stream_id.encode("utf-8")
|
|
95
94
|
if len(stream_id_bytes) > 0xFFFF:
|
|
96
95
|
raise StreamFormatError("stream_id exceeds 65535 bytes; cannot encode")
|
|
@@ -99,7 +98,7 @@ class StreamCodec:
|
|
|
99
98
|
stream_id_len = len(stream_id_bytes) if stream_id_bytes else 0
|
|
100
99
|
event_len = len(event_bytes)
|
|
101
100
|
frame = bytearray(HEADER_LEN + stream_id_len + event_len + len(message))
|
|
102
|
-
frame[0] =
|
|
101
|
+
frame[0] = PROTOCOL_VERSION
|
|
103
102
|
frame[1:3] = stream_id_len.to_bytes(2, "big")
|
|
104
103
|
frame[3:5] = event_len.to_bytes(2, "big")
|
|
105
104
|
|
|
@@ -119,7 +118,7 @@ class StreamCodec:
|
|
|
119
118
|
raise StreamFormatError("frame too short")
|
|
120
119
|
|
|
121
120
|
version = view[0]
|
|
122
|
-
if version
|
|
121
|
+
if version not in (PROTOCOL_VERSION, PROTOCOL_VERSION_COMPRESSED):
|
|
123
122
|
raise StreamFormatError(f"unsupported protocol version: {version}")
|
|
124
123
|
|
|
125
124
|
stream_id_len = int.from_bytes(view[1:3], "big")
|
|
@@ -131,13 +130,22 @@ class StreamCodec:
|
|
|
131
130
|
stream_id_view = view[offset : offset + stream_id_len]
|
|
132
131
|
offset += stream_id_len
|
|
133
132
|
else:
|
|
134
|
-
# Not resumable
|
|
135
133
|
stream_id_view = None
|
|
136
134
|
if len(view) < offset + event_len:
|
|
137
135
|
raise StreamFormatError("truncated event payload")
|
|
138
136
|
event_view = view[offset : offset + event_len]
|
|
139
137
|
offset += event_len
|
|
140
138
|
message_view = view[offset:]
|
|
139
|
+
|
|
140
|
+
if version == PROTOCOL_VERSION_COMPRESSED:
|
|
141
|
+
try:
|
|
142
|
+
decompressed = _zstd_decompressor.decompress(message_view)
|
|
143
|
+
except zstandard.ZstdError as exc:
|
|
144
|
+
raise StreamFormatError(
|
|
145
|
+
f"failed to decompress zstd message: {exc}"
|
|
146
|
+
) from exc
|
|
147
|
+
message_view = memoryview(decompressed)
|
|
148
|
+
|
|
141
149
|
return StreamPacket(
|
|
142
150
|
version=version,
|
|
143
151
|
event=event_view,
|
|
@@ -149,7 +157,7 @@ class StreamCodec:
|
|
|
149
157
|
try:
|
|
150
158
|
return self.decode(data)
|
|
151
159
|
except StreamFormatError as e:
|
|
152
|
-
logger.warning(
|
|
160
|
+
logger.warning("Failed to decode stream frame", error=e)
|
|
153
161
|
return None
|
|
154
162
|
|
|
155
163
|
|
|
@@ -169,7 +177,7 @@ def decode_stream_message(
|
|
|
169
177
|
logger.warning("Unknown type for stream message", type=type(data))
|
|
170
178
|
view = memoryview(bytes(data))
|
|
171
179
|
|
|
172
|
-
# Current protocol version
|
|
180
|
+
# Current protocol version (v1 + v2)
|
|
173
181
|
if packet := STREAM_CODEC.decode_safe(view):
|
|
174
182
|
return packet
|
|
175
183
|
logger.debug("Attempting to decode a v0 formatted stream message")
|
|
@@ -275,61 +275,61 @@ wheels = [
|
|
|
275
275
|
|
|
276
276
|
[[package]]
|
|
277
277
|
name = "cryptography"
|
|
278
|
-
version = "46.0.
|
|
278
|
+
version = "46.0.6"
|
|
279
279
|
source = { registry = "https://pypi.org/simple" }
|
|
280
280
|
dependencies = [
|
|
281
281
|
{ name = "cffi", marker = "platform_python_implementation != 'PyPy'" },
|
|
282
282
|
]
|
|
283
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
284
|
-
wheels = [
|
|
285
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
286
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
287
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
288
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
289
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
290
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
291
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
292
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
293
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
294
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
295
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
296
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
297
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
298
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
299
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
300
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
301
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
302
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
303
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
304
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
305
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
306
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
307
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
308
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
309
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
310
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
311
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
312
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
313
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
314
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
315
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
316
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
317
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
318
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
319
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
320
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
321
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
322
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
323
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
324
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
325
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
326
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
327
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
328
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
329
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
330
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
331
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
332
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
283
|
+
sdist = { url = "https://files.pythonhosted.org/packages/a4/ba/04b1bd4218cbc58dc90ce967106d51582371b898690f3ae0402876cc4f34/cryptography-46.0.6.tar.gz", hash = "sha256:27550628a518c5c6c903d84f637fbecf287f6cb9ced3804838a1295dc1fd0759", size = 750542, upload-time = "2026-03-25T23:34:53.396Z" }
|
|
284
|
+
wheels = [
|
|
285
|
+
{ url = "https://files.pythonhosted.org/packages/47/23/9285e15e3bc57325b0a72e592921983a701efc1ee8f91c06c5f0235d86d9/cryptography-46.0.6-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:64235194bad039a10bb6d2d930ab3323baaec67e2ce36215fd0952fad0930ca8", size = 7176401, upload-time = "2026-03-25T23:33:22.096Z" },
|
|
286
|
+
{ url = "https://files.pythonhosted.org/packages/60/f8/e61f8f13950ab6195b31913b42d39f0f9afc7d93f76710f299b5ec286ae6/cryptography-46.0.6-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:26031f1e5ca62fcb9d1fcb34b2b60b390d1aacaa15dc8b895a9ed00968b97b30", size = 4275275, upload-time = "2026-03-25T23:33:23.844Z" },
|
|
287
|
+
{ url = "https://files.pythonhosted.org/packages/19/69/732a736d12c2631e140be2348b4ad3d226302df63ef64d30dfdb8db7ad1c/cryptography-46.0.6-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9a693028b9cbe51b5a1136232ee8f2bc242e4e19d456ded3fa7c86e43c713b4a", size = 4425320, upload-time = "2026-03-25T23:33:25.703Z" },
|
|
288
|
+
{ url = "https://files.pythonhosted.org/packages/d4/12/123be7292674abf76b21ac1fc0e1af50661f0e5b8f0ec8285faac18eb99e/cryptography-46.0.6-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:67177e8a9f421aa2d3a170c3e56eca4e0128883cf52a071a7cbf53297f18b175", size = 4278082, upload-time = "2026-03-25T23:33:27.423Z" },
|
|
289
|
+
{ url = "https://files.pythonhosted.org/packages/5b/ba/d5e27f8d68c24951b0a484924a84c7cdaed7502bac9f18601cd357f8b1d2/cryptography-46.0.6-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:d9528b535a6c4f8ff37847144b8986a9a143585f0540fbcb1a98115b543aa463", size = 4926514, upload-time = "2026-03-25T23:33:29.206Z" },
|
|
290
|
+
{ url = "https://files.pythonhosted.org/packages/34/71/1ea5a7352ae516d5512d17babe7e1b87d9db5150b21f794b1377eac1edc0/cryptography-46.0.6-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:22259338084d6ae497a19bae5d4c66b7ca1387d3264d1c2c0e72d9e9b6a77b97", size = 4457766, upload-time = "2026-03-25T23:33:30.834Z" },
|
|
291
|
+
{ url = "https://files.pythonhosted.org/packages/01/59/562be1e653accee4fdad92c7a2e88fced26b3fdfce144047519bbebc299e/cryptography-46.0.6-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:760997a4b950ff00d418398ad73fbc91aa2894b5c1db7ccb45b4f68b42a63b3c", size = 3986535, upload-time = "2026-03-25T23:33:33.02Z" },
|
|
292
|
+
{ url = "https://files.pythonhosted.org/packages/d6/8b/b1ebfeb788bf4624d36e45ed2662b8bd43a05ff62157093c1539c1288a18/cryptography-46.0.6-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:3dfa6567f2e9e4c5dceb8ccb5a708158a2a871052fa75c8b78cb0977063f1507", size = 4277618, upload-time = "2026-03-25T23:33:34.567Z" },
|
|
293
|
+
{ url = "https://files.pythonhosted.org/packages/dd/52/a005f8eabdb28df57c20f84c44d397a755782d6ff6d455f05baa2785bd91/cryptography-46.0.6-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:cdcd3edcbc5d55757e5f5f3d330dd00007ae463a7e7aa5bf132d1f22a4b62b19", size = 4890802, upload-time = "2026-03-25T23:33:37.034Z" },
|
|
294
|
+
{ url = "https://files.pythonhosted.org/packages/ec/4d/8e7d7245c79c617d08724e2efa397737715ca0ec830ecb3c91e547302555/cryptography-46.0.6-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:d4e4aadb7fc1f88687f47ca20bb7227981b03afaae69287029da08096853b738", size = 4457425, upload-time = "2026-03-25T23:33:38.904Z" },
|
|
295
|
+
{ url = "https://files.pythonhosted.org/packages/1d/5c/f6c3596a1430cec6f949085f0e1a970638d76f81c3ea56d93d564d04c340/cryptography-46.0.6-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:2b417edbe8877cda9022dde3a008e2deb50be9c407eef034aeeb3a8b11d9db3c", size = 4405530, upload-time = "2026-03-25T23:33:40.842Z" },
|
|
296
|
+
{ url = "https://files.pythonhosted.org/packages/7e/c9/9f9cea13ee2dbde070424e0c4f621c091a91ffcc504ffea5e74f0e1daeff/cryptography-46.0.6-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:380343e0653b1c9d7e1f55b52aaa2dbb2fdf2730088d48c43ca1c7c0abb7cc2f", size = 4667896, upload-time = "2026-03-25T23:33:42.781Z" },
|
|
297
|
+
{ url = "https://files.pythonhosted.org/packages/ad/b5/1895bc0821226f129bc74d00eccfc6a5969e2028f8617c09790bf89c185e/cryptography-46.0.6-cp311-abi3-win32.whl", hash = "sha256:bcb87663e1f7b075e48c3be3ecb5f0b46c8fc50b50a97cf264e7f60242dca3f2", size = 3026348, upload-time = "2026-03-25T23:33:45.021Z" },
|
|
298
|
+
{ url = "https://files.pythonhosted.org/packages/c3/f8/c9bcbf0d3e6ad288b9d9aa0b1dee04b063d19e8c4f871855a03ab3a297ab/cryptography-46.0.6-cp311-abi3-win_amd64.whl", hash = "sha256:6739d56300662c468fddb0e5e291f9b4d084bead381667b9e654c7dd81705124", size = 3483896, upload-time = "2026-03-25T23:33:46.649Z" },
|
|
299
|
+
{ url = "https://files.pythonhosted.org/packages/01/41/3a578f7fd5c70611c0aacba52cd13cb364a5dee895a5c1d467208a9380b0/cryptography-46.0.6-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:2ef9e69886cbb137c2aef9772c2e7138dc581fad4fcbcf13cc181eb5a3ab6275", size = 7117147, upload-time = "2026-03-25T23:33:48.249Z" },
|
|
300
|
+
{ url = "https://files.pythonhosted.org/packages/fa/87/887f35a6fca9dde90cad08e0de0c89263a8e59b2d2ff904fd9fcd8025b6f/cryptography-46.0.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7f417f034f91dcec1cb6c5c35b07cdbb2ef262557f701b4ecd803ee8cefed4f4", size = 4266221, upload-time = "2026-03-25T23:33:49.874Z" },
|
|
301
|
+
{ url = "https://files.pythonhosted.org/packages/aa/a8/0a90c4f0b0871e0e3d1ed126aed101328a8a57fd9fd17f00fb67e82a51ca/cryptography-46.0.6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d24c13369e856b94892a89ddf70b332e0b70ad4a5c43cf3e9cb71d6d7ffa1f7b", size = 4408952, upload-time = "2026-03-25T23:33:52.128Z" },
|
|
302
|
+
{ url = "https://files.pythonhosted.org/packages/16/0b/b239701eb946523e4e9f329336e4ff32b1247e109cbab32d1a7b61da8ed7/cryptography-46.0.6-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:aad75154a7ac9039936d50cf431719a2f8d4ed3d3c277ac03f3339ded1a5e707", size = 4270141, upload-time = "2026-03-25T23:33:54.11Z" },
|
|
303
|
+
{ url = "https://files.pythonhosted.org/packages/0f/a8/976acdd4f0f30df7b25605f4b9d3d89295351665c2091d18224f7ad5cdbf/cryptography-46.0.6-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:3c21d92ed15e9cfc6eb64c1f5a0326db22ca9c2566ca46d845119b45b4400361", size = 4904178, upload-time = "2026-03-25T23:33:55.725Z" },
|
|
304
|
+
{ url = "https://files.pythonhosted.org/packages/b1/1b/bf0e01a88efd0e59679b69f42d4afd5bced8700bb5e80617b2d63a3741af/cryptography-46.0.6-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:4668298aef7cddeaf5c6ecc244c2302a2b8e40f384255505c22875eebb47888b", size = 4441812, upload-time = "2026-03-25T23:33:57.364Z" },
|
|
305
|
+
{ url = "https://files.pythonhosted.org/packages/bb/8b/11df86de2ea389c65aa1806f331cae145f2ed18011f30234cc10ca253de8/cryptography-46.0.6-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:8ce35b77aaf02f3b59c90b2c8a05c73bac12cea5b4e8f3fbece1f5fddea5f0ca", size = 3963923, upload-time = "2026-03-25T23:33:59.361Z" },
|
|
306
|
+
{ url = "https://files.pythonhosted.org/packages/91/e0/207fb177c3a9ef6a8108f234208c3e9e76a6aa8cf20d51932916bd43bda0/cryptography-46.0.6-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:c89eb37fae9216985d8734c1afd172ba4927f5a05cfd9bf0e4863c6d5465b013", size = 4269695, upload-time = "2026-03-25T23:34:00.909Z" },
|
|
307
|
+
{ url = "https://files.pythonhosted.org/packages/21/5e/19f3260ed1e95bced52ace7501fabcd266df67077eeb382b79c81729d2d3/cryptography-46.0.6-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:ed418c37d095aeddf5336898a132fba01091f0ac5844e3e8018506f014b6d2c4", size = 4869785, upload-time = "2026-03-25T23:34:02.796Z" },
|
|
308
|
+
{ url = "https://files.pythonhosted.org/packages/10/38/cd7864d79aa1d92ef6f1a584281433419b955ad5a5ba8d1eb6c872165bcb/cryptography-46.0.6-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:69cf0056d6947edc6e6760e5f17afe4bea06b56a9ac8a06de9d2bd6b532d4f3a", size = 4441404, upload-time = "2026-03-25T23:34:04.35Z" },
|
|
309
|
+
{ url = "https://files.pythonhosted.org/packages/09/0a/4fe7a8d25fed74419f91835cf5829ade6408fd1963c9eae9c4bce390ecbb/cryptography-46.0.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8e7304c4f4e9490e11efe56af6713983460ee0780f16c63f219984dab3af9d2d", size = 4397549, upload-time = "2026-03-25T23:34:06.342Z" },
|
|
310
|
+
{ url = "https://files.pythonhosted.org/packages/5f/a0/7d738944eac6513cd60a8da98b65951f4a3b279b93479a7e8926d9cd730b/cryptography-46.0.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:b928a3ca837c77a10e81a814a693f2295200adb3352395fad024559b7be7a736", size = 4651874, upload-time = "2026-03-25T23:34:07.916Z" },
|
|
311
|
+
{ url = "https://files.pythonhosted.org/packages/cb/f1/c2326781ca05208845efca38bf714f76939ae446cd492d7613808badedf1/cryptography-46.0.6-cp314-cp314t-win32.whl", hash = "sha256:97c8115b27e19e592a05c45d0dd89c57f81f841cc9880e353e0d3bf25b2139ed", size = 3001511, upload-time = "2026-03-25T23:34:09.892Z" },
|
|
312
|
+
{ url = "https://files.pythonhosted.org/packages/c9/57/fe4a23eb549ac9d903bd4698ffda13383808ef0876cc912bcb2838799ece/cryptography-46.0.6-cp314-cp314t-win_amd64.whl", hash = "sha256:c797e2517cb7880f8297e2c0f43bb910e91381339336f75d2c1c2cbf811b70b4", size = 3471692, upload-time = "2026-03-25T23:34:11.613Z" },
|
|
313
|
+
{ url = "https://files.pythonhosted.org/packages/c4/cc/f330e982852403da79008552de9906804568ae9230da8432f7496ce02b71/cryptography-46.0.6-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:12cae594e9473bca1a7aceb90536060643128bb274fcea0fc459ab90f7d1ae7a", size = 7162776, upload-time = "2026-03-25T23:34:13.308Z" },
|
|
314
|
+
{ url = "https://files.pythonhosted.org/packages/49/b3/dc27efd8dcc4bff583b3f01d4a3943cd8b5821777a58b3a6a5f054d61b79/cryptography-46.0.6-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:639301950939d844a9e1c4464d7e07f902fe9a7f6b215bb0d4f28584729935d8", size = 4270529, upload-time = "2026-03-25T23:34:15.019Z" },
|
|
315
|
+
{ url = "https://files.pythonhosted.org/packages/e6/05/e8d0e6eb4f0d83365b3cb0e00eb3c484f7348db0266652ccd84632a3d58d/cryptography-46.0.6-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:ed3775295fb91f70b4027aeba878d79b3e55c0b3e97eaa4de71f8f23a9f2eb77", size = 4414827, upload-time = "2026-03-25T23:34:16.604Z" },
|
|
316
|
+
{ url = "https://files.pythonhosted.org/packages/2f/97/daba0f5d2dc6d855e2dcb70733c812558a7977a55dd4a6722756628c44d1/cryptography-46.0.6-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:8927ccfbe967c7df312ade694f987e7e9e22b2425976ddbf28271d7e58845290", size = 4271265, upload-time = "2026-03-25T23:34:18.586Z" },
|
|
317
|
+
{ url = "https://files.pythonhosted.org/packages/89/06/fe1fce39a37ac452e58d04b43b0855261dac320a2ebf8f5260dd55b201a9/cryptography-46.0.6-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:b12c6b1e1651e42ab5de8b1e00dc3b6354fdfd778e7fa60541ddacc27cd21410", size = 4916800, upload-time = "2026-03-25T23:34:20.561Z" },
|
|
318
|
+
{ url = "https://files.pythonhosted.org/packages/ff/8a/b14f3101fe9c3592603339eb5d94046c3ce5f7fc76d6512a2d40efd9724e/cryptography-46.0.6-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:063b67749f338ca9c5a0b7fe438a52c25f9526b851e24e6c9310e7195aad3b4d", size = 4448771, upload-time = "2026-03-25T23:34:22.406Z" },
|
|
319
|
+
{ url = "https://files.pythonhosted.org/packages/01/b3/0796998056a66d1973fd52ee89dc1bb3b6581960a91ad4ac705f182d398f/cryptography-46.0.6-cp38-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:02fad249cb0e090b574e30b276a3da6a149e04ee2f049725b1f69e7b8351ec70", size = 3978333, upload-time = "2026-03-25T23:34:24.281Z" },
|
|
320
|
+
{ url = "https://files.pythonhosted.org/packages/c5/3d/db200af5a4ffd08918cd55c08399dc6c9c50b0bc72c00a3246e099d3a849/cryptography-46.0.6-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:7e6142674f2a9291463e5e150090b95a8519b2fb6e6aaec8917dd8d094ce750d", size = 4271069, upload-time = "2026-03-25T23:34:25.895Z" },
|
|
321
|
+
{ url = "https://files.pythonhosted.org/packages/d7/18/61acfd5b414309d74ee838be321c636fe71815436f53c9f0334bf19064fa/cryptography-46.0.6-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:456b3215172aeefb9284550b162801d62f5f264a081049a3e94307fe20792cfa", size = 4878358, upload-time = "2026-03-25T23:34:27.67Z" },
|
|
322
|
+
{ url = "https://files.pythonhosted.org/packages/8b/65/5bf43286d566f8171917cae23ac6add941654ccf085d739195a4eacf1674/cryptography-46.0.6-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:341359d6c9e68834e204ceaf25936dffeafea3829ab80e9503860dcc4f4dac58", size = 4448061, upload-time = "2026-03-25T23:34:29.375Z" },
|
|
323
|
+
{ url = "https://files.pythonhosted.org/packages/e0/25/7e49c0fa7205cf3597e525d156a6bce5b5c9de1fd7e8cb01120e459f205a/cryptography-46.0.6-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9a9c42a2723999a710445bc0d974e345c32adfd8d2fac6d8a251fa829ad31cfb", size = 4399103, upload-time = "2026-03-25T23:34:32.036Z" },
|
|
324
|
+
{ url = "https://files.pythonhosted.org/packages/44/46/466269e833f1c4718d6cd496ffe20c56c9c8d013486ff66b4f69c302a68d/cryptography-46.0.6-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:6617f67b1606dfd9fe4dbfa354a9508d4a6d37afe30306fe6c101b7ce3274b72", size = 4659255, upload-time = "2026-03-25T23:34:33.679Z" },
|
|
325
|
+
{ url = "https://files.pythonhosted.org/packages/0a/09/ddc5f630cc32287d2c953fc5d32705e63ec73e37308e5120955316f53827/cryptography-46.0.6-cp38-abi3-win32.whl", hash = "sha256:7f6690b6c55e9c5332c0b59b9c8a3fb232ebf059094c17f9019a51e9827df91c", size = 3010660, upload-time = "2026-03-25T23:34:35.418Z" },
|
|
326
|
+
{ url = "https://files.pythonhosted.org/packages/1b/82/ca4893968aeb2709aacfb57a30dec6fa2ab25b10fa9f064b8882ce33f599/cryptography-46.0.6-cp38-abi3-win_amd64.whl", hash = "sha256:79e865c642cfc5c0b3eb12af83c35c5aeff4fa5c672dc28c43721c2c9fdd2f0f", size = 3471160, upload-time = "2026-03-25T23:34:37.191Z" },
|
|
327
|
+
{ url = "https://files.pythonhosted.org/packages/2e/84/7ccff00ced5bac74b775ce0beb7d1be4e8637536b522b5df9b73ada42da2/cryptography-46.0.6-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:2ea0f37e9a9cf0df2952893ad145fd9627d326a59daec9b0802480fa3bcd2ead", size = 3475444, upload-time = "2026-03-25T23:34:38.944Z" },
|
|
328
|
+
{ url = "https://files.pythonhosted.org/packages/bc/1f/4c926f50df7749f000f20eede0c896769509895e2648db5da0ed55db711d/cryptography-46.0.6-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a3e84d5ec9ba01f8fd03802b2147ba77f0c8f2617b2aff254cedd551844209c8", size = 4218227, upload-time = "2026-03-25T23:34:40.871Z" },
|
|
329
|
+
{ url = "https://files.pythonhosted.org/packages/c6/65/707be3ffbd5f786028665c3223e86e11c4cda86023adbc56bd72b1b6bab5/cryptography-46.0.6-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:12f0fa16cc247b13c43d56d7b35287ff1569b5b1f4c5e87e92cc4fcc00cd10c0", size = 4381399, upload-time = "2026-03-25T23:34:42.609Z" },
|
|
330
|
+
{ url = "https://files.pythonhosted.org/packages/f3/6d/73557ed0ef7d73d04d9aba745d2c8e95218213687ee5e76b7d236a5030fc/cryptography-46.0.6-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:50575a76e2951fe7dbd1f56d181f8c5ceeeb075e9ff88e7ad997d2f42af06e7b", size = 4217595, upload-time = "2026-03-25T23:34:44.205Z" },
|
|
331
|
+
{ url = "https://files.pythonhosted.org/packages/9e/c5/e1594c4eec66a567c3ac4400008108a415808be2ce13dcb9a9045c92f1a0/cryptography-46.0.6-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:90e5f0a7b3be5f40c3a0a0eafb32c681d8d2c181fc2a1bdabe9b3f611d9f6b1a", size = 4380912, upload-time = "2026-03-25T23:34:46.328Z" },
|
|
332
|
+
{ url = "https://files.pythonhosted.org/packages/1a/89/843b53614b47f97fe1abc13f9a86efa5ec9e275292c457af1d4a60dc80e0/cryptography-46.0.6-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6728c49e3b2c180ef26f8e9f0a883a2c585638db64cf265b49c9ba10652d430e", size = 3409955, upload-time = "2026-03-25T23:34:48.465Z" },
|
|
333
333
|
]
|
|
334
334
|
|
|
335
335
|
[[package]]
|
|
@@ -697,6 +697,7 @@ dependencies = [
|
|
|
697
697
|
{ name = "uuid-utils" },
|
|
698
698
|
{ name = "uvicorn" },
|
|
699
699
|
{ name = "watchfiles" },
|
|
700
|
+
{ name = "zstandard" },
|
|
700
701
|
]
|
|
701
702
|
|
|
702
703
|
[package.dev-dependencies]
|
|
@@ -753,6 +754,7 @@ requires-dist = [
|
|
|
753
754
|
{ name = "uuid-utils", specifier = ">=0.12.0" },
|
|
754
755
|
{ name = "uvicorn", specifier = ">=0.26.0" },
|
|
755
756
|
{ name = "watchfiles", specifier = ">=0.13" },
|
|
757
|
+
{ name = "zstandard", specifier = ">=0.23.0" },
|
|
756
758
|
]
|
|
757
759
|
|
|
758
760
|
[package.metadata.requires-dev]
|