langgraph-api 0.12.0.dev6__tar.gz → 0.12.0.dev7__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.dev6 → langgraph_api-0.12.0.dev7}/PKG-INFO +3 -3
- langgraph_api-0.12.0.dev7/langgraph_api/__init__.py +1 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/event_streaming/service.py +89 -113
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/package.json +5 -5
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/yarn.lock +173 -341
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/pyproject.toml +2 -2
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/uv.lock +59 -59
- langgraph_api-0.12.0.dev6/langgraph_api/__init__.py +0 -1
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/.gitignore +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/LICENSE +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/Makefile +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/README.md +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/.gitignore +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/Makefile +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/README.md +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/assistant.ts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/benchmark-runner.ts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/benchmark_profiles.ts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/benchmarks.ts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/cancel_first_second_completes.ts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/enqueued_runs_order.ts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/log-failure.ts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/meta_workload.ts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/stream_write.ts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/thread.ts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/thread_runs_metadata_search.ts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/threads_search_metadata.ts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/types.ts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/benchmark-runners/wait_write.ts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/capacity_dd_report.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/capacity_k6.js +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/capacity_runner.mjs +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/capacity_slack_report.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/capacity_urls.mjs +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/clean-cli.js +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/clean.js +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/continuous/README.md +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/continuous/pyproject.toml +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/continuous/runner.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/continuous/uv.lock +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/graphs.js +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/mixed_workload_k6.js +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/mixed_workload_runner.mjs +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/package.json +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/ramp.js +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/reporting/dd_reporting.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/reporting/slack_slowest_runs.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/reporting/slack_summary.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/run_local.sh +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/staircase.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/staircase_step_k6.js +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/tsconfig.json +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/update-revision.js +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/benchmark/weather.js +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/constraints.txt +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/custom_store.sql +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/forbidden.txt +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/hatch_build.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/healthcheck.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph-cloud-debugging-20260210132856.zip +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/_checkpointer/__init__.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/_checkpointer/_adapter.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/_checkpointer/protocol.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/_factory_utils.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/api/__init__.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/api/a2a.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/api/assistants.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/api/event_streaming.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/api/mcp/__init__.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/api/mcp/_constants.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/api/mcp/_handlers.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/api/mcp/_models.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/api/mcp/_routes.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/api/mcp/_sanitizers.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/api/meta.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/api/openapi.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/api/profile.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/api/runs.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/api/store.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/api/threads.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/api/ui.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/asgi_transport.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/asyncio.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/auth/__init__.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/auth/custom.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/auth/errors.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/auth/langsmith/__init__.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/auth/langsmith/backend.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/auth/langsmith/client.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/auth/middleware.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/auth/noop.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/auth/studio_user.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/cache.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/cli.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/command.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/config/__init__.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/config/_parse.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/config/schemas.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/cron_scheduler.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/encryption/__init__.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/encryption/aes_json.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/encryption/context.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/encryption/custom.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/encryption/middleware.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/encryption/shared.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/errors.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/event_streaming/__init__.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/event_streaming/capabilities.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/event_streaming/constants.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/event_streaming/event_normalizers.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/event_streaming/namespace.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/event_streaming/session.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/event_streaming/state_normalizers.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/event_streaming/types.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/feature_flags.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/graph.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/__init__.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/client.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/ops/__init__.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/ops/assistants.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/ops/cache.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/ops/crons.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/ops/runs.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/ops/threads.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/server.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/servicers/__init__.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/servicers/checkpointer.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/grpc/servicers/encryption.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/http.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/http_metrics.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/http_metrics_utils.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/.gitignore +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/.prettierrc +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/__init__.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/base.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/build.mts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/client.http.mts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/client.mts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/errors.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/global.d.ts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/remote.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/schema.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/src/graph.mts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/src/load.hooks.mjs +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/src/preload.mjs +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/src/utils/experiment-tracing.mts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/src/utils/files.mts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/src/utils/importMap.mts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/src/utils/serde.mts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/sse.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/traceblock.mts +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/tsconfig.json +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/js/ui.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/lc_security/__init__.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/lc_security/exceptions.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/lc_security/policy.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/lc_security/transport.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/logging.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/metadata.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/metrics_collector.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/metrics_otlp.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/middleware/__init__.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/middleware/ensure_store.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/middleware/http_logger.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/middleware/private_network.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/middleware/request_id.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/models/__init__.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/models/run.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/otel_context.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/patch.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/queue_entrypoint.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/release_tags.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/route.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/schema.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/self_hosted_logs.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/self_hosted_metrics.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/serde.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/server.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/sse.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/state.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/store.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/stream.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/stream_v2.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/timing/__init__.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/timing/profiler.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/timing/timer.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/traceblock.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/tunneling/cloudflare.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/utils/__init__.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/utils/cache.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/utils/config.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/utils/errors.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/utils/extract.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/utils/future.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/utils/headers.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/utils/network.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/utils/retriable_client.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/utils/stream_codec.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/utils/uuids.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/validation.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/webhook.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/worker.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/__init__.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/checkpointer.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/conversion/__init__.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/conversion/_compat.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/conversion/checkpoint.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/conversion/config.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/conversion/durability.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/conversion/struct.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/conversion/value.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/__init__.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/checkpointer_pb2.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/core_api_pb2.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/core_api_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/encryption_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/engine_common_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/errors_pb2_grpc.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_grpc_common/serde.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_license/__init__.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_license/validation.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_runtime/__init__.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_runtime/checkpoint.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_runtime/database.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_runtime/lifespan.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_runtime/metrics.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_runtime/ops.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_runtime/queue.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_runtime/retry.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_runtime/routes.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_runtime/store.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/logging.json +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/openapi.json +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/scripts/build_wheel.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/scripts/create_license.py +0 -0
- {langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/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.12.0.
|
|
3
|
+
Version: 0.12.0.dev7
|
|
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
|
|
@@ -14,7 +14,7 @@ Requires-Dist: httptools>=0.5.0; platform_system != 'Windows'
|
|
|
14
14
|
Requires-Dist: httpx>=0.25.0
|
|
15
15
|
Requires-Dist: jsonschema-rs<0.45,>=0.20.0
|
|
16
16
|
Requires-Dist: langchain-core>=0.3.64
|
|
17
|
-
Requires-Dist: langchain-protocol<0.1,>=0.0.
|
|
17
|
+
Requires-Dist: langchain-protocol<0.1,>=0.0.18
|
|
18
18
|
Requires-Dist: langgraph-checkpoint<5,>=3.0.1
|
|
19
19
|
Requires-Dist: langgraph-runtime-inmem<0.32.0.dev0,>=0.31.0.dev0
|
|
20
20
|
Requires-Dist: langgraph-sdk>=0.3.5
|
|
@@ -27,7 +27,7 @@ Requires-Dist: opentelemetry-sdk>=0.0.1
|
|
|
27
27
|
Requires-Dist: orjson>=3.9.7
|
|
28
28
|
Requires-Dist: prometheus-client>=0.0.1
|
|
29
29
|
Requires-Dist: protobuf<7.0.0,>=6.32.1
|
|
30
|
-
Requires-Dist: pyjwt>=2.
|
|
30
|
+
Requires-Dist: pyjwt>=2.13.0
|
|
31
31
|
Requires-Dist: sse-starlette<3.4.0,>=2.1.3
|
|
32
32
|
Requires-Dist: starlette>=0.38.6
|
|
33
33
|
Requires-Dist: structlog<26,>=24.1.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.12.0.dev7"
|
{langgraph_api-0.12.0.dev6 → langgraph_api-0.12.0.dev7}/langgraph_api/event_streaming/service.py
RENAMED
|
@@ -619,17 +619,17 @@ class ThreadRunManager:
|
|
|
619
619
|
"Interrupt namespace does not match the pending interrupt.",
|
|
620
620
|
)
|
|
621
621
|
continue
|
|
622
|
-
# HTTP fallback: the
|
|
623
|
-
#
|
|
624
|
-
#
|
|
625
|
-
# exists on persisted state and trust the client-claimed
|
|
626
|
-
# namespace — the interrupt_id is a UUID, so the existence check
|
|
627
|
-
# alone is sufficient. (Without this, every HTTP ``input.respond``
|
|
628
|
-
# for a subgraph interrupt would 404.)
|
|
622
|
+
# HTTP fallback: the persisted lookup surfaces interrupts by id
|
|
623
|
+
# only, so trust the client-claimed namespace and validate by
|
|
624
|
+
# existence (the id is a namespace hash, so that's sufficient).
|
|
629
625
|
if not thread_state_fetched:
|
|
630
|
-
thread_state_ids = await self.
|
|
626
|
+
thread_state_ids = await self._collect_persisted_interrupt_ids()
|
|
631
627
|
thread_state_fetched = True
|
|
632
|
-
|
|
628
|
+
# Fail open when the lookup is unavailable (``None``): only reject
|
|
629
|
+
# when a definitive id set was read and lacks the target. The
|
|
630
|
+
# checkpointer resume below is authoritative, so a transient lookup
|
|
631
|
+
# failure must not masquerade as a missing interrupt.
|
|
632
|
+
if thread_state_ids is not None and interrupt_id not in thread_state_ids:
|
|
633
633
|
return self._error(
|
|
634
634
|
command.get("id"),
|
|
635
635
|
"no_such_interrupt",
|
|
@@ -655,6 +655,13 @@ class ThreadRunManager:
|
|
|
655
655
|
# map. ``_create_or_resume_run`` forwards it verbatim as
|
|
656
656
|
# ``Command(resume=...)``, which resumes all targeted interrupts in
|
|
657
657
|
# one run.
|
|
658
|
+
#
|
|
659
|
+
# ``update`` / ``goto`` are the optional state mutation and directed
|
|
660
|
+
# jump applied in the same superstep as the resume (HITL "push card
|
|
661
|
+
# into state + resume", or resume-and-redirect flows). They are folded
|
|
662
|
+
# into ``Command(resume, update, goto)`` by ``_create_or_resume_run``,
|
|
663
|
+
# so the resumed run produces a single checkpoint reflecting all of
|
|
664
|
+
# them. Run-level (not per-entry): one resumed run services the batch.
|
|
658
665
|
resume_input = {interrupt_id: response for interrupt_id, _, response in entries}
|
|
659
666
|
try:
|
|
660
667
|
await self._create_or_resume_run(
|
|
@@ -662,6 +669,8 @@ class ThreadRunManager:
|
|
|
662
669
|
{
|
|
663
670
|
"assistant_id": assistant_id,
|
|
664
671
|
"input": resume_input,
|
|
672
|
+
"update": params.get("update"),
|
|
673
|
+
"goto": params.get("goto"),
|
|
665
674
|
"config": params.get("config"),
|
|
666
675
|
"metadata": params.get("metadata"),
|
|
667
676
|
},
|
|
@@ -751,7 +760,29 @@ class ThreadRunManager:
|
|
|
751
760
|
run_payload: dict[str, Any] = {
|
|
752
761
|
"assistant_id": assistant_id,
|
|
753
762
|
"input": None if is_resume else params.get("input"),
|
|
754
|
-
|
|
763
|
+
# On resume, fold the optional state update / directed jump into the
|
|
764
|
+
# same ``Command`` as the resume value so the resumed run produces a
|
|
765
|
+
# single checkpoint (see ``langgraph_api.command.map_cmd``). Only
|
|
766
|
+
# set on the ``input.respond`` path — ``run.start`` params carry no
|
|
767
|
+
# ``update`` / ``goto``, so ``.get`` returns ``None`` and the keys
|
|
768
|
+
# are omitted.
|
|
769
|
+
"command": (
|
|
770
|
+
{
|
|
771
|
+
"resume": params["input"],
|
|
772
|
+
**(
|
|
773
|
+
{"update": params["update"]}
|
|
774
|
+
if params.get("update") is not None
|
|
775
|
+
else {}
|
|
776
|
+
),
|
|
777
|
+
**(
|
|
778
|
+
{"goto": params["goto"]}
|
|
779
|
+
if params.get("goto") is not None
|
|
780
|
+
else {}
|
|
781
|
+
),
|
|
782
|
+
}
|
|
783
|
+
if is_resume
|
|
784
|
+
else None
|
|
785
|
+
),
|
|
755
786
|
"config": run_config,
|
|
756
787
|
"metadata": params.get("metadata"),
|
|
757
788
|
"checkpoint_id": checkpoint_id,
|
|
@@ -832,15 +863,17 @@ class ThreadRunManager:
|
|
|
832
863
|
session = EventStreamingSession(
|
|
833
864
|
run_id=run_id,
|
|
834
865
|
thread_id=thread_id,
|
|
835
|
-
initial_run=
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
866
|
+
initial_run=(
|
|
867
|
+
run
|
|
868
|
+
if _is_record(run)
|
|
869
|
+
else {
|
|
870
|
+
"run_id": run_id,
|
|
871
|
+
"thread_id": thread_id,
|
|
872
|
+
"assistant_id": getattr(run, "assistant_id", ""),
|
|
873
|
+
"status": getattr(run, "status", "pending"),
|
|
874
|
+
"kwargs": getattr(run, "kwargs", {}),
|
|
875
|
+
}
|
|
876
|
+
),
|
|
844
877
|
get_run=self._make_get_run(run_id, thread_id),
|
|
845
878
|
get_thread_state=self._make_get_thread_state(thread_id),
|
|
846
879
|
source=None,
|
|
@@ -1016,56 +1049,41 @@ class ThreadRunManager:
|
|
|
1016
1049
|
async def _lookup_interrupt_in_thread_state(
|
|
1017
1050
|
self, interrupt_id: str
|
|
1018
1051
|
) -> list[str] | None:
|
|
1019
|
-
"""Existence check for ``interrupt_id``
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
the
|
|
1027
|
-
|
|
1028
|
-
Returns ``[]`` if the interrupt exists, or ``None`` if not.
|
|
1029
|
-
Note: the return value is **not** the interrupt's actual
|
|
1030
|
-
namespace — this fallback only walks root-level tasks (the
|
|
1031
|
-
state shape doesn't reliably surface subgraph interrupts in
|
|
1032
|
-
the ``tasks`` list), so subgraph interrupts come back as
|
|
1033
|
-
``[]`` even when their real namespace is e.g. ``["sub:1"]``.
|
|
1034
|
-
Callers must not use the return value for namespace comparison;
|
|
1035
|
-
treat ``[]`` as "interrupt found, namespace unknown" and trust
|
|
1036
|
-
the client-claimed namespace.
|
|
1052
|
+
"""Existence check for ``interrupt_id`` against persisted thread state.
|
|
1053
|
+
|
|
1054
|
+
Fallback for ``input.respond`` on stateless HTTP transports, where the
|
|
1055
|
+
fresh session hasn't observed ``input.requested`` yet. Backed by the
|
|
1056
|
+
durable thread-row map (see :meth:`_collect_persisted_interrupt_ids`).
|
|
1057
|
+
|
|
1058
|
+
Returns ``[]`` if the interrupt exists, else ``None``. The ``[]`` is a
|
|
1059
|
+
sentinel, not a namespace — the map carries no namespace, so callers
|
|
1060
|
+
must treat it as "found, namespace unknown" and trust the client claim.
|
|
1037
1061
|
"""
|
|
1038
|
-
found = await self.
|
|
1062
|
+
found = await self._collect_persisted_interrupt_ids()
|
|
1039
1063
|
if found is None:
|
|
1040
1064
|
return None
|
|
1041
1065
|
return [] if interrupt_id in found else None
|
|
1042
1066
|
|
|
1043
|
-
async def
|
|
1044
|
-
"""
|
|
1067
|
+
async def _collect_persisted_interrupt_ids(self) -> set[str] | None:
|
|
1068
|
+
"""Collect interrupt ids from the durable thread-row ``interrupts`` map.
|
|
1045
1069
|
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1070
|
+
``Threads.set_status`` writes ``{task_id: [{id, value}, ...]}`` onto the
|
|
1071
|
+
thread row atomically with the status whenever a run pauses. Reading it
|
|
1072
|
+
is a plain row fetch (same ``connect()`` + ``Threads.get`` path as
|
|
1073
|
+
:meth:`_get_thread_assistant_id`) — unlike ``Threads.State.get`` it does
|
|
1074
|
+
not rebuild the graph, so it can't spuriously raise and reject a
|
|
1075
|
+
legitimate resume, and it survives reconnects/redeploys.
|
|
1052
1076
|
|
|
1053
|
-
|
|
1054
|
-
|
|
1077
|
+
Returns the set of interrupt ids (empty when none are pending), or
|
|
1078
|
+
``None`` if the fetch failed — callers treat ``None`` as "unavailable"
|
|
1079
|
+
and fall open rather than fabricating ``no_such_interrupt``.
|
|
1055
1080
|
"""
|
|
1056
1081
|
from langgraph_runtime.database import connect # noqa: PLC0415
|
|
1057
1082
|
|
|
1058
|
-
# ``supports_core_api=False`` so the postgres backend yields a
|
|
1059
|
-
# real connection. The default (``True``) yields ``None`` because
|
|
1060
|
-
# data ops normally go through the gRPC server — but ``State.get``
|
|
1061
|
-
# uses the local checkpointer and needs a usable ``conn``.
|
|
1062
1083
|
try:
|
|
1063
|
-
async with connect(
|
|
1064
|
-
|
|
1065
|
-
|
|
1066
|
-
{"configurable": {"thread_id": self._thread_id}},
|
|
1067
|
-
subgraphs=True,
|
|
1068
|
-
)
|
|
1084
|
+
async with connect() as conn:
|
|
1085
|
+
result = await self._threads.get(conn, self._thread_id)
|
|
1086
|
+
thread = await anext(result) if hasattr(result, "__anext__") else result
|
|
1069
1087
|
except Exception as exc:
|
|
1070
1088
|
logger.warning(
|
|
1071
1089
|
"interrupt_lookup_failed",
|
|
@@ -1075,19 +1093,14 @@ class ThreadRunManager:
|
|
|
1075
1093
|
)
|
|
1076
1094
|
return None
|
|
1077
1095
|
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1096
|
+
interrupts_map = thread.get("interrupts") if _is_record(thread) else None
|
|
1097
|
+
if not _is_record(interrupts_map):
|
|
1098
|
+
return set()
|
|
1081
1099
|
found: set[str] = set()
|
|
1082
|
-
for
|
|
1083
|
-
|
|
1084
|
-
task.get("interrupts")
|
|
1085
|
-
if _is_record(task)
|
|
1086
|
-
else getattr(task, "interrupts", None)
|
|
1087
|
-
)
|
|
1088
|
-
if not isinstance(interrupts, (list, tuple)):
|
|
1100
|
+
for entries in interrupts_map.values():
|
|
1101
|
+
if not isinstance(entries, (list, tuple)):
|
|
1089
1102
|
continue
|
|
1090
|
-
for entry in
|
|
1103
|
+
for entry in entries:
|
|
1091
1104
|
entry_id = (
|
|
1092
1105
|
entry.get("id") if _is_record(entry) else getattr(entry, "id", None)
|
|
1093
1106
|
)
|
|
@@ -1096,52 +1109,15 @@ class ThreadRunManager:
|
|
|
1096
1109
|
return found
|
|
1097
1110
|
|
|
1098
1111
|
async def _has_pending_interrupts(self) -> bool:
|
|
1099
|
-
# Prefer the session's
|
|
1100
|
-
#
|
|
1101
|
-
#
|
|
1102
|
-
#
|
|
1103
|
-
#
|
|
1104
|
-
# between the run completing and the state being persisted).
|
|
1112
|
+
# Prefer the session's in-memory pending interrupts (populated the
|
|
1113
|
+
# instant ``input.requested`` surfaces) to skip a DB round-trip;
|
|
1114
|
+
# otherwise consult the durable thread-row map. A lookup failure
|
|
1115
|
+
# (``None``) reads as "none pending" — ``run.start`` then falls back to
|
|
1116
|
+
# the ``current_status == "interrupted"`` signal for resume-vs-start.
|
|
1105
1117
|
if self._session is not None and self._session._pending_interrupts:
|
|
1106
1118
|
return True
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
try:
|
|
1111
|
-
async with connect(supports_core_api=False) as conn:
|
|
1112
|
-
state = await self._threads.State.get(
|
|
1113
|
-
conn,
|
|
1114
|
-
{"configurable": {"thread_id": self._thread_id}},
|
|
1115
|
-
subgraphs=True,
|
|
1116
|
-
)
|
|
1117
|
-
# ``Threads.State.get`` returns ``langgraph.types.StateSnapshot``
|
|
1118
|
-
# — a NamedTuple whose ``tasks`` is a tuple of ``PregelTask``s,
|
|
1119
|
-
# each with an ``interrupts`` tuple. Treat both dicts (from
|
|
1120
|
-
# JSON serialization) and NamedTuples uniformly so this works
|
|
1121
|
-
# whether the caller went through REST → dict or gRPC →
|
|
1122
|
-
# StateSnapshot.
|
|
1123
|
-
tasks = (
|
|
1124
|
-
state.get("tasks")
|
|
1125
|
-
if _is_record(state)
|
|
1126
|
-
else getattr(state, "tasks", None)
|
|
1127
|
-
) or ()
|
|
1128
|
-
for t in tasks:
|
|
1129
|
-
interrupts = (
|
|
1130
|
-
t.get("interrupts")
|
|
1131
|
-
if _is_record(t)
|
|
1132
|
-
else getattr(t, "interrupts", None)
|
|
1133
|
-
)
|
|
1134
|
-
if isinstance(interrupts, (list, tuple)) and len(interrupts) > 0:
|
|
1135
|
-
return True
|
|
1136
|
-
return False
|
|
1137
|
-
except Exception as exc:
|
|
1138
|
-
logger.warning(
|
|
1139
|
-
"has_pending_interrupts_failed",
|
|
1140
|
-
thread_id=self._thread_id,
|
|
1141
|
-
error=str(exc),
|
|
1142
|
-
error_type=type(exc).__name__,
|
|
1143
|
-
)
|
|
1144
|
-
return False
|
|
1119
|
+
found = await self._collect_persisted_interrupt_ids()
|
|
1120
|
+
return bool(found)
|
|
1145
1121
|
|
|
1146
1122
|
# ------------------------------------------------------------------
|
|
1147
1123
|
# Command forwarding
|
|
@@ -17,21 +17,21 @@
|
|
|
17
17
|
"@types/json-schema": "^7.0.15",
|
|
18
18
|
"@typescript/vfs": "^1.6.4",
|
|
19
19
|
"dedent": "^1.7.2",
|
|
20
|
-
"esbuild": "^0.28.
|
|
20
|
+
"esbuild": "^0.28.1",
|
|
21
21
|
"exit-hook": "^5.1.0",
|
|
22
|
-
"hono": "^4.12.
|
|
22
|
+
"hono": "^4.12.25",
|
|
23
23
|
"p-queue": "^9.0.1",
|
|
24
24
|
"p-retry": "^7.1.1",
|
|
25
25
|
"tsx": "^4.21.0",
|
|
26
26
|
"typescript": "^5.9.3",
|
|
27
|
-
"undici": "^7.
|
|
27
|
+
"undici": "^7.28.0",
|
|
28
28
|
"uuid": "^14.0.0",
|
|
29
|
-
"vite": "^7.3.
|
|
29
|
+
"vite": "^7.3.5",
|
|
30
30
|
"winston": "^3.19.0",
|
|
31
31
|
"zod": "^4.3.6"
|
|
32
32
|
},
|
|
33
33
|
"resolutions": {
|
|
34
|
-
"esbuild": "^0.28.
|
|
34
|
+
"esbuild": "^0.28.1",
|
|
35
35
|
"langsmith": ">=0.4.6",
|
|
36
36
|
"vite": "^6.4.2"
|
|
37
37
|
},
|