langgraph-api 0.8.6__tar.gz → 0.8.7__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.8.6 → langgraph_api-0.8.7}/Makefile +1 -1
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/PKG-INFO +4 -6
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/continuous/uv.lock +8 -8
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/constraints.txt +3 -3
- langgraph_api-0.8.7/langgraph_api/__init__.py +1 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/api/__init__.py +0 -4
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/auth/custom.py +1 -19
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/auth/middleware.py +1 -1
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/config/__init__.py +0 -15
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/feature_flags.py +3 -8
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/graph.py +0 -51
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/grpc/ops/threads.py +1 -24
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/metrics_datadog.py +0 -19
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/route.py +1 -34
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/schema.py +0 -2
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/stream.py +10 -227
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +1 -1
- langgraph_api-0.8.7/langgraph_grpc_common/proto/core_api_pb2.py +272 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/core_api_pb2.pyi +5 -127
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +1 -1
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/encryption_pb2.pyi +3 -13
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +1 -1
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/engine_common_pb2.pyi +3 -119
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +1 -1
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.py +1 -1
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +1 -1
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.py +1 -1
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +1 -1
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +1 -1
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +1 -1
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2_grpc.py +1 -1
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +1 -1
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +1 -1
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.py +1 -1
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/errors_pb2_grpc.py +1 -1
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/openapi.json +0 -311
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/pyproject.toml +3 -9
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/uv.lock +370 -473
- langgraph_api-0.8.6/langgraph_api/__init__.py +0 -1
- langgraph_api-0.8.6/langgraph_api/api/protocol.py +0 -376
- langgraph_api-0.8.6/langgraph_api/protocol/__init__.py +0 -1
- langgraph_api-0.8.6/langgraph_api/protocol/capabilities.py +0 -123
- langgraph_api-0.8.6/langgraph_api/protocol/constants.py +0 -43
- langgraph_api-0.8.6/langgraph_api/protocol/event_normalizers.py +0 -89
- langgraph_api-0.8.6/langgraph_api/protocol/namespace.py +0 -48
- langgraph_api-0.8.6/langgraph_api/protocol/service.py +0 -900
- langgraph_api-0.8.6/langgraph_api/protocol/session.py +0 -1764
- langgraph_api-0.8.6/langgraph_api/protocol/state_normalizers.py +0 -385
- langgraph_api-0.8.6/langgraph_api/protocol/types.py +0 -168
- langgraph_api-0.8.6/langgraph_api/utils/messages.py +0 -62
- langgraph_api-0.8.6/langgraph_grpc_common/proto/core_api_pb2.py +0 -272
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/.gitignore +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/LICENSE +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/README.md +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/.gitignore +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/Makefile +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/README.md +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/benchmark-runners/assistant.ts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/benchmark-runners/benchmark-runner.ts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/benchmark-runners/benchmark_profiles.ts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/benchmark-runners/benchmarks.ts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/benchmark-runners/cancel_first_second_completes.ts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/benchmark-runners/enqueued_runs_order.ts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/benchmark-runners/log-failure.ts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/benchmark-runners/meta_workload.ts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/benchmark-runners/stream_write.ts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/benchmark-runners/thread.ts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/benchmark-runners/thread_runs_metadata_search.ts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/benchmark-runners/threads_search_metadata.ts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/benchmark-runners/types.ts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/benchmark-runners/wait_write.ts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/capacity_dd_report.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/capacity_k6.js +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/capacity_runner.mjs +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/capacity_slack_report.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/capacity_urls.mjs +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/clean-cli.js +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/clean.js +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/continuous/README.md +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/continuous/pyproject.toml +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/continuous/runner.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/graphs.js +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/mixed_workload_k6.js +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/mixed_workload_runner.mjs +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/package.json +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/ramp.js +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/reporting/dd_reporting.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/reporting/slack_slowest_runs.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/reporting/slack_summary.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/run_local.sh +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/staircase.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/staircase_step_k6.js +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/tsconfig.json +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/update-revision.js +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/benchmark/weather.js +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/custom_store.sql +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/forbidden.txt +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/hatch_build.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/healthcheck.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph-cloud-debugging-20260210132856.zip +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/_checkpointer/__init__.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/_checkpointer/_adapter.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/_checkpointer/protocol.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/_factory_utils.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/api/a2a.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/api/assistants.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/api/mcp/__init__.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/api/mcp/_constants.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/api/mcp/_handlers.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/api/mcp/_models.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/api/mcp/_routes.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/api/mcp/_sanitizers.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/api/meta.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/api/openapi.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/api/profile.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/api/runs.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/api/store.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/api/threads.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/api/ui.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/asgi_transport.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/asyncio.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/auth/__init__.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/auth/errors.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/auth/langsmith/__init__.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/auth/langsmith/backend.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/auth/langsmith/client.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/auth/noop.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/auth/studio_user.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/cache.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/cli.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/command.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/config/_parse.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/config/schemas.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/cron_scheduler.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/encryption/__init__.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/encryption/aes_json.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/encryption/context.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/encryption/custom.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/encryption/middleware.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/encryption/shared.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/errors.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/grpc/__init__.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/grpc/client.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/grpc/ops/__init__.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/grpc/ops/assistants.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/grpc/ops/cache.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/grpc/ops/crons.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/grpc/ops/runs.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/grpc/server.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/grpc/servicers/__init__.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/grpc/servicers/checkpointer.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/grpc/servicers/encryption.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/http.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/http_metrics.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/http_metrics_utils.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/.gitignore +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/.prettierrc +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/__init__.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/base.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/build.mts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/client.http.mts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/client.mts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/errors.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/global.d.ts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/package.json +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/remote.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/schema.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/src/graph.mts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/src/load.hooks.mjs +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/src/preload.mjs +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/src/utils/experiment-tracing.mts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/src/utils/files.mts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/src/utils/importMap.mts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/src/utils/serde.mts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/sse.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/traceblock.mts +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/tsconfig.json +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/ui.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/js/yarn.lock +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/lc_security/__init__.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/lc_security/exceptions.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/lc_security/policy.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/lc_security/transport.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/logging.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/metadata.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/middleware/__init__.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/middleware/ensure_store.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/middleware/http_logger.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/middleware/private_network.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/middleware/request_id.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/models/__init__.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/models/run.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/otel_context.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/patch.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/queue_entrypoint.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/release_tags.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/self_hosted_logs.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/self_hosted_metrics.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/serde.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/server.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/sse.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/state.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/store.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/timing/__init__.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/timing/profiler.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/timing/timer.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/traceblock.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/tunneling/cloudflare.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/utils/__init__.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/utils/cache.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/utils/config.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/utils/errors.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/utils/extract.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/utils/future.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/utils/headers.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/utils/network.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/utils/retriable_client.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/utils/stream_codec.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/utils/uuids.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/validation.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/webhook.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_api/worker.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/__init__.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/checkpointer.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/conversion/__init__.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/conversion/_compat.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/conversion/checkpoint.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/conversion/config.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/conversion/durability.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/conversion/struct.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/conversion/value.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/__init__.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/checkpointer_pb2.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_grpc_common/serde.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_license/__init__.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_license/validation.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_runtime/__init__.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_runtime/checkpoint.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_runtime/database.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_runtime/lifespan.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_runtime/metrics.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_runtime/ops.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_runtime/queue.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_runtime/retry.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_runtime/routes.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/langgraph_runtime/store.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/logging.json +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/scripts/build_wheel.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/scripts/create_license.py +0 -0
- {langgraph_api-0.8.6 → langgraph_api-0.8.7}/scripts/run_a2a_tck.py +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
.PHONY: build release lint format test test_watch start start-inmem start-inmem-license-oss start start-js-server build-go-server start-go-server stop-go-server check-version check-base-imports test-a2a-tck test-a2a-tck-mandatory start-test-a2a-tck start-test-a2a-tck-mandatory start-test-a2a-tck-watch test-mcp-conformance start-test-mcp-conformance list-mcp-scenarios
|
|
2
2
|
|
|
3
3
|
# Environment variables
|
|
4
|
-
LANGSERVE_GRAPHS_ALL = '{"agent": {"path": "./tests/graphs/agent.py:graph", "description": "agent"}, "assistant_id_runtime": "./tests/graphs/assistant_id_runtime.py:graph", "custom_lifespan": "./tests/graphs/my_router.py:graph", "single_node": "./tests/graphs/single_node.py:graph", "benchmark": "./tests/graphs/benchmark.py:graph", "config_graph": "./tests/graphs/config_graph.py:graph", "other": "./tests/graphs/other.py:make_graph", "weather": "./tests/graphs/weather.py:mk_weather_graph", "searchy": "./tests/graphs/searchy.py:graph", "agent_simple": "./tests/graphs/agent_simple.py:graph", "simple_runtime": "./tests/graphs/simple_runtime.py:graph", "agent_interrupt": "./tests/graphs/agent_interrupt.py:graph", "agent_parallel_interrupt": "./tests/graphs/agent_parallel_interrupt.py:graph", "message_type_test": "./tests/graphs/message_type_test.py:graph", "remote_subgraph_parent": "./tests/graphs/remote_subgraph_parent.py:graph", "simple_remote": "./tests/graphs/simple_remote.py:graph", "nested_subgraphs": "./tests/graphs/nested_subgraphs.py:graph", "functional_fibonacci": "./tests/graphs/functional_fibonacci.py:fibonacci", "state_graph_fibonacci": "./tests/graphs/state_graph_fibonacci.py:fibonacci", "max_concurrency_graph": "./tests/graphs/max_concurrency_graph.py:graph", "unserializable_subgraph": "./tests/graphs/unserializable_subgraph.py:graph", "agent_interrupt_text": "./tests/graphs/agent_interrupt_text.py:graph", "agent_echo_stream": "./tests/graphs/agent_echo_stream.py:graph", "
|
|
4
|
+
LANGSERVE_GRAPHS_ALL = '{"agent": {"path": "./tests/graphs/agent.py:graph", "description": "agent"}, "assistant_id_runtime": "./tests/graphs/assistant_id_runtime.py:graph", "custom_lifespan": "./tests/graphs/my_router.py:graph", "single_node": "./tests/graphs/single_node.py:graph", "benchmark": "./tests/graphs/benchmark.py:graph", "config_graph": "./tests/graphs/config_graph.py:graph", "other": "./tests/graphs/other.py:make_graph", "weather": "./tests/graphs/weather.py:mk_weather_graph", "searchy": "./tests/graphs/searchy.py:graph", "agent_simple": "./tests/graphs/agent_simple.py:graph", "simple_runtime": "./tests/graphs/simple_runtime.py:graph", "agent_interrupt": "./tests/graphs/agent_interrupt.py:graph", "agent_parallel_interrupt": "./tests/graphs/agent_parallel_interrupt.py:graph", "message_type_test": "./tests/graphs/message_type_test.py:graph", "remote_subgraph_parent": "./tests/graphs/remote_subgraph_parent.py:graph", "simple_remote": "./tests/graphs/simple_remote.py:graph", "nested_subgraphs": "./tests/graphs/nested_subgraphs.py:graph", "functional_fibonacci": "./tests/graphs/functional_fibonacci.py:fibonacci", "state_graph_fibonacci": "./tests/graphs/state_graph_fibonacci.py:fibonacci", "max_concurrency_graph": "./tests/graphs/max_concurrency_graph.py:graph", "unserializable_subgraph": "./tests/graphs/unserializable_subgraph.py:graph", "agent_interrupt_text": "./tests/graphs/agent_interrupt_text.py:graph", "agent_echo_stream": "./tests/graphs/agent_echo_stream.py:graph", "runtime_graph": "./tests/graphs/runtime_graph.py:graph", "tool_call_chunk_stream": "./tests/graphs/tool_call_chunk_stream.py:graph", "ui_tool_call_stream": "./tests/graphs/ui_tool_call_stream.py:graph"}'
|
|
5
5
|
LANGSERVE_GRAPHS_AUTH = '{"agent": {"path": "./tests/graphs/agent.py:graph", "description": "agent"}, "assistant_id_runtime": "./tests/graphs/assistant_id_runtime.py:graph", "config_graph": "./tests/graphs/config_graph.py:graph", "other": "./tests/graphs/other.py:make_graph", "weather": "./tests/graphs/weather.py:mk_weather_graph", "searchy": "./tests/graphs/searchy.py:graph", "agent_simple": "./tests/graphs/agent_simple.py:graph", "simple_runtime": "./tests/graphs/simple_runtime.py:graph", "agent_parallel_interrupt": "./tests/graphs/agent_parallel_interrupt.py:graph", "functional_fibonacci": "./tests/graphs/functional_fibonacci.py:fibonacci", "state_graph_fibonacci": "./tests/graphs/state_graph_fibonacci.py:fibonacci", "runtime_graph": "./tests/graphs/runtime_graph.py:graph"}'
|
|
6
6
|
|
|
7
7
|
# Go server management
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: langgraph-api
|
|
3
|
-
Version: 0.8.
|
|
3
|
+
Version: 0.8.7
|
|
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
|
|
7
7
|
Requires-Python: >=3.11
|
|
8
8
|
Requires-Dist: cloudpickle>=3.0.0
|
|
9
9
|
Requires-Dist: cryptography<47.0,>=42.0.0
|
|
10
|
-
Requires-Dist: grpcio-health-checking<1.
|
|
11
|
-
Requires-Dist: grpcio-tools==1.
|
|
12
|
-
Requires-Dist: grpcio<1.
|
|
10
|
+
Requires-Dist: grpcio-health-checking<1.79.0,>=1.78.0
|
|
11
|
+
Requires-Dist: grpcio-tools==1.78.0
|
|
12
|
+
Requires-Dist: grpcio<1.79.0,>=1.78.0
|
|
13
13
|
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.15
|
|
18
17
|
Requires-Dist: langgraph-checkpoint<5,>=3.0.1
|
|
19
18
|
Requires-Dist: langgraph-runtime-inmem<0.29.0,>=0.28.0
|
|
20
19
|
Requires-Dist: langgraph-sdk>=0.3.5
|
|
@@ -35,7 +34,6 @@ Requires-Dist: uuid-utils>=0.12.0
|
|
|
35
34
|
Requires-Dist: uvicorn>=0.26.0
|
|
36
35
|
Requires-Dist: uvloop>=0.18.0; platform_system != 'Windows'
|
|
37
36
|
Requires-Dist: watchfiles>=0.13
|
|
38
|
-
Requires-Dist: websockets>=13.0
|
|
39
37
|
Requires-Dist: zstandard>=0.23.0
|
|
40
38
|
Description-Content-Type: text/markdown
|
|
41
39
|
|
|
@@ -25,14 +25,14 @@ wheels = [
|
|
|
25
25
|
|
|
26
26
|
[[package]]
|
|
27
27
|
name = "click"
|
|
28
|
-
version = "8.3.
|
|
28
|
+
version = "8.3.2"
|
|
29
29
|
source = { registry = "https://pypi.org/simple" }
|
|
30
30
|
dependencies = [
|
|
31
31
|
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
|
32
32
|
]
|
|
33
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
33
|
+
sdist = { url = "https://files.pythonhosted.org/packages/57/75/31212c6bf2503fdf920d87fee5d7a86a2e3bcf444984126f13d8e4016804/click-8.3.2.tar.gz", hash = "sha256:14162b8b3b3550a7d479eafa77dfd3c38d9dc8951f6f69c78913a8f9a7540fd5", size = 302856, upload-time = "2026-04-03T19:14:45.118Z" }
|
|
34
34
|
wheels = [
|
|
35
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
35
|
+
{ url = "https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl", hash = "sha256:1924d2c27c5653561cd2cae4548d1406039cb79b858b747cfea24924bbc1616d", size = 108379, upload-time = "2026-04-03T19:14:43.505Z" },
|
|
36
36
|
]
|
|
37
37
|
|
|
38
38
|
[[package]]
|
|
@@ -120,25 +120,25 @@ dependencies = [
|
|
|
120
120
|
|
|
121
121
|
[package.metadata]
|
|
122
122
|
requires-dist = [
|
|
123
|
-
{ name = "click", specifier = ">=8.3.
|
|
123
|
+
{ name = "click", specifier = ">=8.3.2" },
|
|
124
124
|
{ name = "datadog-api-client", specifier = ">=2.0.0" },
|
|
125
125
|
{ name = "httpx", specifier = ">=0.27.0" },
|
|
126
|
-
{ name = "langgraph-sdk", specifier = ">=0.
|
|
126
|
+
{ name = "langgraph-sdk", specifier = ">=0.2.10" },
|
|
127
127
|
{ name = "python-dateutil", specifier = ">=2.8.0" },
|
|
128
128
|
{ name = "structlog", specifier = ">=24.1.0" },
|
|
129
129
|
]
|
|
130
130
|
|
|
131
131
|
[[package]]
|
|
132
132
|
name = "langgraph-sdk"
|
|
133
|
-
version = "0.3.
|
|
133
|
+
version = "0.3.12"
|
|
134
134
|
source = { registry = "https://pypi.org/simple" }
|
|
135
135
|
dependencies = [
|
|
136
136
|
{ name = "httpx" },
|
|
137
137
|
{ name = "orjson" },
|
|
138
138
|
]
|
|
139
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
139
|
+
sdist = { url = "https://files.pythonhosted.org/packages/fd/a1/012f0e0f5c9fd26f92bdc9d244756ad673c428230156ef668e6ec7c18cee/langgraph_sdk-0.3.12.tar.gz", hash = "sha256:c9c9ec22b3c0fcd352e2b8f32a815164f69446b8648ca22606329f4ff4c59a71", size = 194932, upload-time = "2026-03-18T22:15:54.592Z" }
|
|
140
140
|
wheels = [
|
|
141
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
141
|
+
{ url = "https://files.pythonhosted.org/packages/17/4d/4f796e86b03878ab20d9b30aaed1ad459eda71a5c5b67f7cfe712f3548f2/langgraph_sdk-0.3.12-py3-none-any.whl", hash = "sha256:44323804965d6ec2a07127b3cf08a0428ea6deaeb172c2d478d5cd25540e3327", size = 95834, upload-time = "2026-03-18T22:15:53.545Z" },
|
|
142
142
|
]
|
|
143
143
|
|
|
144
144
|
[[package]]
|
|
@@ -18,9 +18,9 @@ structlog>=24.1.0
|
|
|
18
18
|
cloudpickle>=3.0.0
|
|
19
19
|
truststore>=0.1
|
|
20
20
|
protobuf>=6.32.1,<7.0.0
|
|
21
|
-
grpcio>=1.
|
|
22
|
-
grpcio-tools>=1.
|
|
23
|
-
grpcio-health-checking>=1.
|
|
21
|
+
grpcio>=1.78.0,<1.79.0
|
|
22
|
+
grpcio-tools>=1.78.0,<1.79.0
|
|
23
|
+
grpcio-health-checking>=1.78.0,<1.79.0
|
|
24
24
|
opentelemetry-api>=0.0.1
|
|
25
25
|
opentelemetry-sdk>=0.0.1
|
|
26
26
|
opentelemetry-exporter-otlp-proto-http>=0.0.1
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.8.7"
|
|
@@ -19,7 +19,6 @@ from langgraph_api.api.mcp import mcp_routes
|
|
|
19
19
|
from langgraph_api.api.meta import meta_info, meta_metrics
|
|
20
20
|
from langgraph_api.api.openapi import get_openapi_spec
|
|
21
21
|
from langgraph_api.api.profile import profile_routes
|
|
22
|
-
from langgraph_api.api.protocol import protocol_routes
|
|
23
22
|
from langgraph_api.api.runs import runs_routes
|
|
24
23
|
from langgraph_api.api.store import store_routes
|
|
25
24
|
from langgraph_api.api.threads import threads_routes
|
|
@@ -132,8 +131,6 @@ if HTTP_CONFIG:
|
|
|
132
131
|
protected_routes.extend(mcp_routes)
|
|
133
132
|
if not HTTP_CONFIG.get("disable_a2a"):
|
|
134
133
|
protected_routes.extend(a2a_routes)
|
|
135
|
-
if not HTTP_CONFIG.get("disable_runs") and not HTTP_CONFIG.get("disable_protocol"):
|
|
136
|
-
protected_routes.extend(protocol_routes)
|
|
137
134
|
else:
|
|
138
135
|
protected_routes.extend(assistants_routes)
|
|
139
136
|
protected_routes.extend(runs_routes)
|
|
@@ -144,7 +141,6 @@ else:
|
|
|
144
141
|
protected_routes.extend(ui_routes)
|
|
145
142
|
protected_routes.extend(mcp_routes)
|
|
146
143
|
protected_routes.extend(a2a_routes)
|
|
147
|
-
protected_routes.extend(protocol_routes)
|
|
148
144
|
|
|
149
145
|
|
|
150
146
|
def _metadata_fn(app_import: str) -> dict[str, str]:
|
|
@@ -178,26 +178,8 @@ class CustomAuthBackend(AuthenticationBackend):
|
|
|
178
178
|
if self.fn is None:
|
|
179
179
|
return None
|
|
180
180
|
try:
|
|
181
|
-
# ``starlette.requests.Request`` asserts ``scope["type"] ==
|
|
182
|
-
# "http"`` in its constructor, so constructing one from a
|
|
183
|
-
# WebSocket scope raises ``AssertionError``. Only build it
|
|
184
|
-
# when the handler actually declared a ``request`` parameter
|
|
185
|
-
# AND the scope is HTTP; reject WebSocket scopes with a
|
|
186
|
-
# clear auth-layer error when the handler asks for one.
|
|
187
|
-
request_obj: Request | None = None
|
|
188
|
-
if self._param_names and "request" in self._param_names:
|
|
189
|
-
if conn.scope.get("type") == "http":
|
|
190
|
-
request_obj = Request(conn.scope)
|
|
191
|
-
else:
|
|
192
|
-
raise AuthError(
|
|
193
|
-
"Custom auth handler declares `request: Request`, "
|
|
194
|
-
"which is not supported for WebSocket connections. "
|
|
195
|
-
"Use `headers`, `authorization`, `scope`, or "
|
|
196
|
-
"`scopes` parameters instead.",
|
|
197
|
-
status_code=403,
|
|
198
|
-
)
|
|
199
181
|
args = _extract_arguments_from_scope(
|
|
200
|
-
conn.scope, self._param_names, request=
|
|
182
|
+
conn.scope, self._param_names, request=Request(conn.scope)
|
|
201
183
|
)
|
|
202
184
|
response = await self.fn(**args)
|
|
203
185
|
return _normalize_auth_response(response)
|
|
@@ -52,7 +52,7 @@ class ConditionalAuthenticationMiddleware(AuthenticationMiddleware):
|
|
|
52
52
|
await self.app(scope, receive, send)
|
|
53
53
|
return
|
|
54
54
|
|
|
55
|
-
if scope["path"].startswith("/ui") and scope
|
|
55
|
+
if scope["path"].startswith("/ui") and scope["method"] == "GET":
|
|
56
56
|
# disable auth for UI asset requests
|
|
57
57
|
await self.app(scope, receive, send)
|
|
58
58
|
return
|
|
@@ -182,21 +182,6 @@ LSD_GRPC_SERVER_MAX_SEND_MSG_BYTES = env(
|
|
|
182
182
|
"LSD_GRPC_SERVER_MAX_SEND_MSG_BYTES", cast=int, default=300 * 1024 * 1024
|
|
183
183
|
)
|
|
184
184
|
LSD_PUBLISH_QUEUE_SIZE = env("LSD_PUBLISH_QUEUE_SIZE", cast=int, default=512)
|
|
185
|
-
# Per-run protocol v2 event buffer size. Each ``RunProtocolSession``
|
|
186
|
-
# retains at most this many normalized protocol events for
|
|
187
|
-
# reconnecting clients to replay via ``since`` / ``Last-Event-ID``.
|
|
188
|
-
# When the limit is exceeded, oldest events are evicted; reconnects
|
|
189
|
-
# whose cursor falls behind the buffer head receive a ``resume_gap``
|
|
190
|
-
# error. Operators running graphs that emit >10k events per run can
|
|
191
|
-
# bump this to avoid gaps on flaky networks, at the cost of memory
|
|
192
|
-
# (roughly ``size * avg_event_bytes`` per active run). See
|
|
193
|
-
# ``langgraph_api.protocol.constants.DEFAULT_MAX_BUFFER_SIZE``.
|
|
194
|
-
_DEFAULT_PROTOCOL_V2_BUFFER_SIZE = 10_000
|
|
195
|
-
LSD_PROTOCOL_V2_BUFFER_SIZE = env(
|
|
196
|
-
"LSD_PROTOCOL_V2_BUFFER_SIZE",
|
|
197
|
-
cast=int,
|
|
198
|
-
default=_DEFAULT_PROTOCOL_V2_BUFFER_SIZE,
|
|
199
|
-
)
|
|
200
185
|
# Not in public docs: infrastructure, set by platform
|
|
201
186
|
GRPC_CLIENT_MAX_RECV_MSG_BYTES = env(
|
|
202
187
|
"GRPC_CLIENT_MAX_RECV_MSG_BYTES", cast=int, default=300 * 1024 * 1024
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import os
|
|
2
|
-
import re
|
|
3
2
|
|
|
4
3
|
from langgraph.version import __version__
|
|
5
4
|
|
|
@@ -25,13 +24,9 @@ FF_USE_JS_API = os.getenv("FF_USE_JS_API", "false").lower() in (
|
|
|
25
24
|
)
|
|
26
25
|
|
|
27
26
|
# In langgraph <= 1.0.3, we automatically subscribed to updates stream events to surface interrupts. In langgraph 1.0.4 we include interrupts in values events (which we are automatically subscribed to), so we no longer need to implicitly subscribe to updates stream events
|
|
28
|
-
#
|
|
29
|
-
# parse correctly; fall back to (0, 0, 0) only if no leading digits at all.
|
|
30
|
-
_LEADING_DIGITS = re.compile(r"^\d+")
|
|
27
|
+
# If the version is not valid, e.g. rc/alpha/etc., we default to 0.0.0
|
|
31
28
|
try:
|
|
32
|
-
LANGGRAPH_PY_PATCH = tuple(
|
|
33
|
-
|
|
34
|
-
)
|
|
35
|
-
except (AttributeError, ValueError):
|
|
29
|
+
LANGGRAPH_PY_PATCH = tuple(map(int, __version__.split(".")[:3]))
|
|
30
|
+
except ValueError:
|
|
36
31
|
LANGGRAPH_PY_PATCH = (0, 0, 0)
|
|
37
32
|
UPDATES_NEEDED_FOR_INTERRUPTS = LANGGRAPH_PY_PATCH <= (1, 0, 3)
|
|
@@ -56,20 +56,6 @@ GRAPHS: dict[str, GraphValue] = {}
|
|
|
56
56
|
NAMESPACE_GRAPH = UUID("6ba7b821-9dad-11d1-80b4-00c04fd430c8")
|
|
57
57
|
SYSTEM_ASSISTANT_IDS: set[str] = set()
|
|
58
58
|
|
|
59
|
-
# Map of graph_id → zero-arg factory returning a fresh list of custom
|
|
60
|
-
# ``StreamTransformer`` instances, populated from a module-level
|
|
61
|
-
# ``stream_transformers`` symbol on the graph's source module. Used by
|
|
62
|
-
# the Protocol v2 streaming path in ``stream.py`` to wire user-supplied
|
|
63
|
-
# projections (``StreamChannel`` / ``EventLog``) into ``StreamingHandler``
|
|
64
|
-
# so events from the user's transformers surface on ``custom:<name>``
|
|
65
|
-
# subscriptions on the wire.
|
|
66
|
-
#
|
|
67
|
-
# We require a factory (rather than accepting raw transformer instances)
|
|
68
|
-
# because transformers are stateful — sharing one instance across
|
|
69
|
-
# concurrent runs would cause state bleed. The factory is invoked once
|
|
70
|
-
# per run and the returned list is handed straight to ``StreamMux``.
|
|
71
|
-
GRAPH_STREAM_TRANSFORMERS: dict[str, Callable[[], list[Any]]] = {}
|
|
72
|
-
|
|
73
59
|
|
|
74
60
|
async def register_graph(
|
|
75
61
|
graph_id: str,
|
|
@@ -843,46 +829,9 @@ def _graph_from_spec(spec: GraphSpec) -> GraphValue:
|
|
|
843
829
|
f"Could not find a Graph in module at path: {spec.path}"
|
|
844
830
|
)
|
|
845
831
|
|
|
846
|
-
_register_stream_transformers_from_module(spec.id, module)
|
|
847
832
|
return graph
|
|
848
833
|
|
|
849
834
|
|
|
850
|
-
def _register_stream_transformers_from_module(graph_id: str, module: Any) -> None:
|
|
851
|
-
"""Populate ``GRAPH_STREAM_TRANSFORMERS`` from an optional module export.
|
|
852
|
-
|
|
853
|
-
Graph authors opt in by defining a ``stream_transformers`` symbol
|
|
854
|
-
at module scope. The symbol must be a zero-arg callable that returns
|
|
855
|
-
a fresh list of either:
|
|
856
|
-
|
|
857
|
-
* ``langgraph.stream.StreamTransformer`` **factories** — callables of
|
|
858
|
-
the shape ``(scope: tuple[str, ...]) -> StreamTransformer``
|
|
859
|
-
(``StreamTransformer`` subclasses are themselves valid factories).
|
|
860
|
-
This is the preferred form and mirrors the JS
|
|
861
|
-
``streamTransformers: [createMyTransformer]`` convention.
|
|
862
|
-
* ``StreamTransformer`` **instances** — back-compat form. Each bare
|
|
863
|
-
instance is auto-wrapped by :func:`_coerce_stream_transformer_factory`
|
|
864
|
-
into a factory that returns the same instance for every mux scope,
|
|
865
|
-
so a single ``custom:<name>`` channel is shared across the whole
|
|
866
|
-
run (rather than fragmenting into a fresh channel per subgraph).
|
|
867
|
-
|
|
868
|
-
Anything else is ignored (with a warning on local dev) so bad
|
|
869
|
-
wiring doesn't break the graph.
|
|
870
|
-
"""
|
|
871
|
-
factory = getattr(module, "stream_transformers", None)
|
|
872
|
-
if factory is None:
|
|
873
|
-
return
|
|
874
|
-
if not callable(factory):
|
|
875
|
-
logger.warning(
|
|
876
|
-
"Module exports ``stream_transformers`` but it is not a callable — "
|
|
877
|
-
"ignoring. Define it as ``def stream_transformers(): return [...]`` "
|
|
878
|
-
"returning a fresh list of StreamTransformer instances per call.",
|
|
879
|
-
graph_id=graph_id,
|
|
880
|
-
kind=type(factory).__name__,
|
|
881
|
-
)
|
|
882
|
-
return
|
|
883
|
-
GRAPH_STREAM_TRANSFORMERS[graph_id] = factory
|
|
884
|
-
|
|
885
|
-
|
|
886
835
|
@functools.lru_cache(maxsize=1)
|
|
887
836
|
def _get_init_embeddings() -> Callable[[str, ...], "Embeddings"] | None:
|
|
888
837
|
try:
|
|
@@ -933,28 +933,6 @@ class Threads(Authenticated):
|
|
|
933
933
|
Yields:
|
|
934
934
|
Tuples of (event_bytes, message_bytes, stream_id_bytes|None)
|
|
935
935
|
"""
|
|
936
|
-
async for (
|
|
937
|
-
event_bytes,
|
|
938
|
-
message_bytes,
|
|
939
|
-
stream_id_bytes,
|
|
940
|
-
_run_id,
|
|
941
|
-
) in Threads.Stream.join_protocol(
|
|
942
|
-
thread_id,
|
|
943
|
-
stream_modes=stream_modes,
|
|
944
|
-
last_event_id=last_event_id,
|
|
945
|
-
ctx=ctx,
|
|
946
|
-
):
|
|
947
|
-
yield (event_bytes, message_bytes, stream_id_bytes)
|
|
948
|
-
|
|
949
|
-
@staticmethod
|
|
950
|
-
async def join_protocol(
|
|
951
|
-
thread_id: UUID | str,
|
|
952
|
-
*,
|
|
953
|
-
stream_modes: list[str] | None = None,
|
|
954
|
-
last_event_id: str | None = None,
|
|
955
|
-
ctx: Any = None,
|
|
956
|
-
):
|
|
957
|
-
"""Stream thread events with their run id for protocol demux."""
|
|
958
936
|
auth_filters = await Threads.Stream.handle_event(
|
|
959
937
|
ctx,
|
|
960
938
|
"read",
|
|
@@ -983,13 +961,12 @@ class Threads(Authenticated):
|
|
|
983
961
|
if event.HasField("stream_id")
|
|
984
962
|
else None
|
|
985
963
|
)
|
|
986
|
-
run_id = event.run_id if event.HasField("run_id") else None
|
|
987
964
|
|
|
988
965
|
# Transform error events from gRPC format to older Python format
|
|
989
966
|
if event.event_type == "error":
|
|
990
967
|
message_bytes = transform_grpc_error_event(message_bytes)
|
|
991
968
|
|
|
992
|
-
yield (event_bytes, message_bytes, stream_id_bytes
|
|
969
|
+
yield (event_bytes, message_bytes, stream_id_bytes)
|
|
993
970
|
except Exception as e:
|
|
994
971
|
if isinstance(e, AioRpcError):
|
|
995
972
|
_handle_grpc_error(e)
|
|
@@ -130,18 +130,6 @@ COUNTER_SERVER_REQUESTED_TO_STOP = def_counter(
|
|
|
130
130
|
"server_requested_to_stop_counter", METRIC_TIER_INFO
|
|
131
131
|
)
|
|
132
132
|
COUNTER_SERVER_STOPPED = def_counter("server_stopped_counter", METRIC_TIER_INFO)
|
|
133
|
-
COUNTER_PROTOCOL_V2_BUFFER_EVICTED = def_counter(
|
|
134
|
-
"protocol_v2_buffer_evicted_counter", METRIC_TIER_INFO
|
|
135
|
-
)
|
|
136
|
-
COUNTER_PROTOCOL_V2_EVENT_EMITTED = def_counter(
|
|
137
|
-
"protocol_v2_event_emitted_counter", METRIC_TIER_DEBUG
|
|
138
|
-
)
|
|
139
|
-
COUNTER_PROTOCOL_V2_RESUME_GAP = def_counter(
|
|
140
|
-
"protocol_v2_resume_gap_counter", METRIC_TIER_INFO
|
|
141
|
-
)
|
|
142
|
-
COUNTER_PROTOCOL_V2_TRANSPORT_SEND_FAILURE = def_counter(
|
|
143
|
-
"protocol_v2_transport_send_failure_counter", METRIC_TIER_INFO
|
|
144
|
-
)
|
|
145
133
|
|
|
146
134
|
# Pre-defined latency metrics.
|
|
147
135
|
LATENCY_RUN_EXECUTION = def_latency("run_execution_latency", METRIC_TIER_INFO)
|
|
@@ -159,17 +147,10 @@ GAUGE_WORKERS_AVAILABLE = def_gauge("workers_available", METRIC_TIER_CRITICAL)
|
|
|
159
147
|
GAUGE_PUBLISH_QUEUE_AVAILABILITY = def_gauge(
|
|
160
148
|
"publish_queue_availability", METRIC_TIER_CRITICAL
|
|
161
149
|
)
|
|
162
|
-
# Protocol v2 sessions retain a bounded replay buffer per run. Track the
|
|
163
|
-
# observed occupancy so operators can tune LSD_PROTOCOL_V2_BUFFER_SIZE before
|
|
164
|
-
# reconnects start seeing resume gaps.
|
|
165
|
-
GAUGE_PROTOCOL_V2_BUFFER_SIZE = def_gauge("protocol_v2_buffer_size", METRIC_TIER_DEBUG)
|
|
166
150
|
|
|
167
151
|
|
|
168
152
|
# Pre-defined histogram metrics.
|
|
169
153
|
HISTOGRAM_STREAM_DATA_SIZE = def_histogram("stream_data_size_bytes", METRIC_TIER_DEBUG)
|
|
170
|
-
HISTOGRAM_PROTOCOL_V2_REPLAYED_EVENTS = def_histogram(
|
|
171
|
-
"protocol_v2_replayed_events", METRIC_TIER_DEBUG
|
|
172
|
-
)
|
|
173
154
|
|
|
174
155
|
|
|
175
156
|
def _normalize_emitting_tier(value: int) -> int:
|
|
@@ -12,7 +12,7 @@ from starlette.exceptions import HTTPException
|
|
|
12
12
|
from starlette.middleware import Middleware
|
|
13
13
|
from starlette.requests import Request
|
|
14
14
|
from starlette.responses import JSONResponse
|
|
15
|
-
from starlette.routing import Route,
|
|
15
|
+
from starlette.routing import Route, compile_path, get_name
|
|
16
16
|
from starlette.types import ASGIApp, Receive, Scope, Send
|
|
17
17
|
|
|
18
18
|
from langgraph_api import config
|
|
@@ -172,39 +172,6 @@ class ApiRoute(Route):
|
|
|
172
172
|
return await super().handle(scope, receive, send)
|
|
173
173
|
|
|
174
174
|
|
|
175
|
-
class ApiWebSocketRoute(WebSocketRoute):
|
|
176
|
-
"""WebSocket route that propagates the auth context var.
|
|
177
|
-
|
|
178
|
-
Mirrors ``ApiRoute.handle`` for WebSocket handlers: starlette's
|
|
179
|
-
``AuthenticationMiddleware`` populates ``scope["user"]`` and
|
|
180
|
-
``scope["auth"]`` on the upgrade, but code that reads auth via
|
|
181
|
-
the ``AuthContext`` ContextVar (``get_auth_ctx``) still sees
|
|
182
|
-
``None`` because the default ``WebSocketRoute.handle`` does not
|
|
183
|
-
enter the ``with_user`` context manager.
|
|
184
|
-
|
|
185
|
-
Without this wrapper, ops like ``Runs.search`` / ``Threads.State.get``
|
|
186
|
-
invoked from the WebSocket handler path read ``None`` for the user
|
|
187
|
-
and silently return empty results or fail authorization. This is the
|
|
188
|
-
WebSocket analog of ``ApiRoute`` and must be used for any WS route
|
|
189
|
-
that reaches the ops layer.
|
|
190
|
-
"""
|
|
191
|
-
|
|
192
|
-
async def handle(self, scope: Scope, receive: Receive, send: Send) -> None:
|
|
193
|
-
from langgraph_api.logging import set_logging_context # noqa: PLC0415
|
|
194
|
-
|
|
195
|
-
scope["route"] = self.path
|
|
196
|
-
set_logging_context({"path": self.path, "method": "WEBSOCKET"})
|
|
197
|
-
route_pattern = f"{scope.get('root_path', '')}{self.path}"
|
|
198
|
-
_name_otel_span(scope, route_pattern)
|
|
199
|
-
ctx = get_auth_ctx()
|
|
200
|
-
if ctx:
|
|
201
|
-
user, auth = ctx.user, ctx.permissions
|
|
202
|
-
else:
|
|
203
|
-
user, auth = scope.get("user"), scope.get("auth")
|
|
204
|
-
async with with_user(user, auth):
|
|
205
|
-
return await super().handle(scope, receive, send)
|
|
206
|
-
|
|
207
|
-
|
|
208
175
|
def _name_otel_span(scope: Scope, route_pattern: str):
|
|
209
176
|
"""Best-effort rename of the active OTEL server span to include the route.
|
|
210
177
|
|