langgraph-api 0.19.0.dev3__tar.gz → 0.19.0.dev4__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.19.0.dev3 → langgraph_api-0.19.0.dev4}/PKG-INFO +2 -2
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/constraints.txt +1 -1
- langgraph_api-0.19.0.dev4/langgraph_api/__init__.py +1 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/meta.py +2 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/runs.py +2 -1
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/store.py +5 -1
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/threads.py +7 -1
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/event_streaming/service.py +5 -3
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/graph.py +10 -1
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/ops/runs.py +57 -7
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/ops/threads.py +14 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/remote.py +20 -2
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/metadata.py +8 -2
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/middleware/ensure_store.py +4 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/models/run.py +11 -2
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/priority_settings.py +12 -1
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/serde.py +10 -1
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/stream.py +55 -27
- langgraph_api-0.19.0.dev4/langgraph_api/tracing_session.py +107 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/validation.py +1 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/worker.py +33 -33
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/checkpointer_pb2.py +22 -22
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +5 -1
- langgraph_api-0.19.0.dev4/langgraph_grpc_common/proto/core_api_pb2.py +296 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/core_api_pb2.pyi +28 -3
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/serde.py +10 -1
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/openapi.json +17 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/pyproject.toml +1 -1
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/uv.lock +55 -45
- langgraph_api-0.19.0.dev3/langgraph_api/__init__.py +0 -1
- langgraph_api-0.19.0.dev3/langgraph_api/tracing_session.py +0 -22
- langgraph_api-0.19.0.dev3/langgraph_grpc_common/proto/core_api_pb2.py +0 -296
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/.gitignore +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/LICENSE +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/Makefile +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/README.md +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/.gitignore +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/Makefile +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/README.md +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/REPORTS.md +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/assistant.ts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/benchmark-runner.ts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/benchmark_profiles.ts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/benchmarks.ts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/cancel_first_second_completes.ts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/classify-error.test.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/classify-error.ts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/delta-turns-lib.test.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/delta-turns-lib.ts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/delta_turns.ts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/enqueued_runs_order.ts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/interrupt_resume.ts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/log-failure.ts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/meta_workload.ts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/store.ts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/stream_write.ts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/thread.ts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/thread_runs_metadata_search.ts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/threads_search_metadata.ts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/types.ts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/benchmark-runners/wait_write.ts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/capacity-ci.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/capacity-ci.test.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/clean-cli.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/clean.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/continuous/README.md +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/continuous/pyproject.toml +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/continuous/runner.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/continuous/uv.lock +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/cpu-probe.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/daily-report.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/daily-report.test.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/delta-report.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/delta-report.test.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/graphs.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/history.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/history.test.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/host-v2.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/host-v2.test.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/multer.test.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/package.json +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/ramp.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/reporting/dd_reporting.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/runner-descriptions.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/server-metrics.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/server-metrics.test.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/slack.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/staircase.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/staircase_step_k6.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/tsconfig.json +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/update-revision.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/weather.js +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/benchmark/yarn.lock +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/custom_store.sql +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/forbidden.txt +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/hatch_build.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/healthcheck.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph-cloud-debugging-20260210132856.zip +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/_checkpointer/__init__.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/_checkpointer/_adapter.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/_checkpointer/protocol.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/_factory_utils.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/__init__.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/a2a.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/a2ui.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/a2ui_schemas/README.md +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/a2ui_schemas/client_capabilities.json +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/a2ui_schemas/client_data_model.json +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/a2ui_schemas/client_to_server.json +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/a2ui_schemas/server_to_client.json +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/assistants.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/event_streaming.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/__init__.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_call_thread.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_calls.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_constants.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_digest.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_elicitation.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_forms.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_origins.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_outcome.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_pauses.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_request_state.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_routes.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_sanitizers.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_sdk.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_server.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/mcp/_tools.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/openapi.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/profile.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/api/ui.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/asgi_transport.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/asyncio.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/auth/__init__.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/auth/custom.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/auth/errors.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/auth/langsmith/__init__.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/auth/langsmith/backend.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/auth/langsmith/client.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/auth/middleware.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/auth/noop.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/auth/studio_user.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/beacon_data_plane_jwt_auth.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/cache.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/cli.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/command.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/config/__init__.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/config/_parse.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/config/schemas.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/cron_scheduler.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/drain.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/encryption/__init__.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/encryption/aes_json.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/encryption/context.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/encryption/custom.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/encryption/middleware.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/encryption/shared.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/errors.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/event_streaming/__init__.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/event_streaming/capabilities.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/event_streaming/constants.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/event_streaming/event_normalizers.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/event_streaming/namespace.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/event_streaming/session.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/event_streaming/state_normalizers.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/event_streaming/types.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/executor/__init__.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/executor/__main__.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/feature_flags.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/__init__.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/client.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/ops/__init__.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/ops/assistants.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/ops/cache.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/ops/crons.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/server.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/servicers/__init__.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/servicers/checkpointer.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/grpc/servicers/encryption.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/http.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/http_metrics.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/http_metrics_utils.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/.gitignore +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/.prettierrc +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/.yarnclean +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/__init__.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/base.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/build.mts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/client.http.mts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/client.mts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/errors.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/global.d.ts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/package.json +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/schema.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/src/auth-mutations.mts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/src/graph.mts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/src/load.hooks.mjs +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/src/preload.mjs +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/src/utils/experiment-tracing.mts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/src/utils/files.mts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/src/utils/importMap.mts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/src/utils/serde.mts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/sse.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/traceblock.mts +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/tsconfig.json +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/ui.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/js/yarn.lock +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/lc_security/__init__.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/lc_security/exceptions.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/lc_security/policy.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/lc_security/transport.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/logging.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/metrics_collector.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/metrics_otlp.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/middleware/__init__.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/middleware/http_logger.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/middleware/private_network.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/middleware/request_id.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/models/__init__.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/operator_routes.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/otel_context.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/patch.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/queue_entrypoint.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/release_tags.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/route.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/schema.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/self_hosted_logs.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/self_hosted_metrics.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/server.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/sse.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/state.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/store.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/stream_v2.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/timing/__init__.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/timing/profiler.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/timing/startup.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/timing/timer.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/traceblock.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/tunneling/cloudflare.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/utils/__init__.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/utils/cache.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/utils/config.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/utils/errors.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/utils/extract.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/utils/future.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/utils/headers.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/utils/network.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/utils/retriable_client.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/utils/stream_codec.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/utils/uuids.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/webhook.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/worker_runtime.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/__init__.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/checkpointer.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/conversion/__init__.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/conversion/_compat.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/conversion/checkpoint.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/conversion/config.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/conversion/durability.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/conversion/store.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/conversion/struct.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/conversion/value.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/__init__.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/encryption_pb2.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/engine_common_pb2.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/errors_pb2_grpc.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/orchestrator_pb2.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/orchestrator_pb2.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/orchestrator_pb2_grpc.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/orchestrator_pb2_grpc.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/store_pb2.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/store_pb2.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/store_pb2_grpc.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/proto/store_pb2_grpc.pyi +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_grpc_common/store.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_license/__init__.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_license/validation.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_runtime/__init__.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_runtime/checkpoint.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_runtime/database.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_runtime/encryption.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_runtime/lifespan.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_runtime/metrics.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_runtime/ops.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_runtime/queue.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_runtime/retry.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_runtime/routes.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_runtime/store.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/logging.json +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/scripts/build_wheel.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/scripts/create_license.py +0 -0
- {langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/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.19.0.
|
|
3
|
+
Version: 0.19.0.dev4
|
|
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
|
|
@@ -10,7 +10,7 @@ Requires-Dist: cloudpickle>=3.0.0
|
|
|
10
10
|
Requires-Dist: cryptography>=50.0.0
|
|
11
11
|
Requires-Dist: grpcio-health-checking<1.82.0,>=1.81.0
|
|
12
12
|
Requires-Dist: grpcio-tools==1.81.1
|
|
13
|
-
Requires-Dist: grpcio<1.
|
|
13
|
+
Requires-Dist: grpcio<1.86.0,>=1.85.0
|
|
14
14
|
Requires-Dist: httptools>=0.5.0; platform_system != 'Windows'
|
|
15
15
|
Requires-Dist: httpx>=0.25.0
|
|
16
16
|
Requires-Dist: jsonschema-rs<0.45,>=0.35.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.19.0.dev4"
|
|
@@ -9,6 +9,7 @@ from langgraph_api.feature_flags import IS_POSTGRES_OR_GRPC_BACKEND
|
|
|
9
9
|
from langgraph_api.http_metrics import HTTP_METRICS_COLLECTOR
|
|
10
10
|
from langgraph_api.route import ApiRequest
|
|
11
11
|
from langgraph_api.schema import PoolStats, PostgresPoolStats, RedisPoolStats
|
|
12
|
+
from langgraph_api.tracing_session import ADDRESS_SUPPORT
|
|
12
13
|
from langgraph_runtime.database import connect, pool_stats
|
|
13
14
|
from langgraph_runtime.metrics import get_metrics
|
|
14
15
|
|
|
@@ -81,6 +82,7 @@ async def meta_info(request: ApiRequest):
|
|
|
81
82
|
and bool(config.TRACING),
|
|
82
83
|
"langsmith_tracing_replicas": True,
|
|
83
84
|
"langsmith_tracing_session_on_runs": True,
|
|
85
|
+
"langsmith_tracing_address": ADDRESS_SUPPORT,
|
|
84
86
|
"mcp": MCP_SERVED,
|
|
85
87
|
},
|
|
86
88
|
"host": {
|
|
@@ -631,9 +631,9 @@ async def join_run_stream(request: ApiRequest):
|
|
|
631
631
|
]
|
|
632
632
|
|
|
633
633
|
last_event_id = request.headers.get("last-event-id") or None
|
|
634
|
+
sub = await Runs.Stream.subscribe(run_id, thread_id)
|
|
634
635
|
|
|
635
636
|
async def body():
|
|
636
|
-
sub = await Runs.Stream.subscribe(run_id, thread_id)
|
|
637
637
|
try:
|
|
638
638
|
async for event, message, stream_id in Runs.Stream.join(
|
|
639
639
|
run_id,
|
|
@@ -658,6 +658,7 @@ async def join_run_stream(request: ApiRequest):
|
|
|
658
658
|
"Location": location,
|
|
659
659
|
"Content-Location": f"/threads/{thread_id}/runs/{run_id}",
|
|
660
660
|
},
|
|
661
|
+
on_close=lambda: sub.__aexit__(None, None, None),
|
|
661
662
|
)
|
|
662
663
|
|
|
663
664
|
|
|
@@ -78,12 +78,16 @@ async def put_item(request: ApiRequest):
|
|
|
78
78
|
namespace = tuple(payload["namespace"]) if payload.get("namespace") else ()
|
|
79
79
|
if err := _validate_namespace(namespace):
|
|
80
80
|
return err
|
|
81
|
+
ttl = payload.get("ttl")
|
|
82
|
+
if "ttl" not in payload:
|
|
83
|
+
store = await get_store()
|
|
84
|
+
ttl = (store.ttl_config or {}).get("default_ttl")
|
|
81
85
|
handler_payload: dict[str, Any] = {
|
|
82
86
|
"namespace": namespace,
|
|
83
87
|
"key": payload["key"],
|
|
84
88
|
"value": payload["value"],
|
|
85
89
|
"index": payload.get("index"),
|
|
86
|
-
"ttl":
|
|
90
|
+
"ttl": ttl,
|
|
87
91
|
}
|
|
88
92
|
await handle_event("put", handler_payload)
|
|
89
93
|
if err := _validate_namespace(handler_payload["namespace"]):
|
|
@@ -534,8 +534,13 @@ async def delete_thread(request: ApiRequest):
|
|
|
534
534
|
"""Delete a thread by ID."""
|
|
535
535
|
thread_id = request.path_params["thread_id"]
|
|
536
536
|
validate_uuid(thread_id, "Invalid thread ID: must be a UUID")
|
|
537
|
+
sync_checkpoint_delete = (
|
|
538
|
+
request.query_params.get("sync_checkpoint_delete", "").lower() == "true"
|
|
539
|
+
)
|
|
537
540
|
async with connect() as conn:
|
|
538
|
-
tid = await Threads.delete(
|
|
541
|
+
tid = await Threads.delete(
|
|
542
|
+
conn, thread_id, sync_checkpoint_delete=sync_checkpoint_delete
|
|
543
|
+
)
|
|
539
544
|
await fetchone(tid)
|
|
540
545
|
return Response(status_code=204)
|
|
541
546
|
|
|
@@ -565,6 +570,7 @@ async def prune_threads(request: ApiRequest):
|
|
|
565
570
|
pruned_count = await Threads.prune(
|
|
566
571
|
thread_ids=thread_ids,
|
|
567
572
|
strategy=strategy,
|
|
573
|
+
sync_checkpoint_delete=payload.get("sync_checkpoint_delete", False),
|
|
568
574
|
)
|
|
569
575
|
|
|
570
576
|
return ApiResponse({"pruned_count": pruned_count})
|
{langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/event_streaming/service.py
RENAMED
|
@@ -46,6 +46,7 @@ from langgraph_api.event_streaming.session import (
|
|
|
46
46
|
from langgraph_api.event_streaming.types import Subscription
|
|
47
47
|
from langgraph_api.feature_flags import FF_V2_EVENT_STREAMING, PREFER_GRPC_CHECKPOINTER
|
|
48
48
|
from langgraph_api.schema import MultitaskStrategy
|
|
49
|
+
from langgraph_api.tracing_session import tracer_destination
|
|
49
50
|
from langgraph_api.validation import sanitize_reserved_keys
|
|
50
51
|
|
|
51
52
|
logger = structlog.stdlib.get_logger(__name__)
|
|
@@ -101,20 +102,21 @@ def validate_checkpoint_id_from_runnable_config(params: dict[str, Any]) -> str |
|
|
|
101
102
|
|
|
102
103
|
def _langsmith_tracer_from_run_start(
|
|
103
104
|
params: dict[str, Any],
|
|
104
|
-
) -> dict[str,
|
|
105
|
+
) -> dict[str, Any] | None:
|
|
105
106
|
tracer = params.get("langsmith_tracer")
|
|
106
107
|
if tracer is None:
|
|
107
108
|
return None
|
|
108
109
|
if not _is_record(tracer):
|
|
109
110
|
raise ValueError("langsmith_tracer must be an object.")
|
|
110
|
-
unknown = tracer.keys() - {"project_name", "example_id"}
|
|
111
|
+
unknown = tracer.keys() - {"project_name", "example_id", "address"}
|
|
111
112
|
if unknown:
|
|
112
113
|
raise ValueError(
|
|
113
114
|
f"langsmith_tracer has unsupported fields: {sorted(unknown)!r}."
|
|
114
115
|
)
|
|
115
116
|
for key, value in tracer.items():
|
|
116
|
-
if not isinstance(value, str):
|
|
117
|
+
if key != "address" and not isinstance(value, str):
|
|
117
118
|
raise ValueError(f"langsmith_tracer.{key} must be a string.")
|
|
119
|
+
tracer_destination({"langsmith_tracer": tracer})
|
|
118
120
|
return dict(tracer)
|
|
119
121
|
|
|
120
122
|
|
|
@@ -424,7 +424,16 @@ async def get_graph(
|
|
|
424
424
|
if graph_obj.name == "LangGraph":
|
|
425
425
|
update["name"] = graph_id
|
|
426
426
|
if isinstance(graph_obj, BaseRemotePregel):
|
|
427
|
-
|
|
427
|
+
# JS factories run in the sidecar and only see this config, so they
|
|
428
|
+
# get the same read-vs-run signal as Python factories here.
|
|
429
|
+
config = config or {}
|
|
430
|
+
update["config"] = {
|
|
431
|
+
**config,
|
|
432
|
+
"configurable": {
|
|
433
|
+
**(config.get("configurable") or {}),
|
|
434
|
+
"__is_for_execution__": is_for_execution(access_context),
|
|
435
|
+
},
|
|
436
|
+
}
|
|
428
437
|
yield graph_obj.copy(update=update)
|
|
429
438
|
finally:
|
|
430
439
|
var_child_runnable_config.set(None)
|
|
@@ -39,7 +39,7 @@ from langgraph_grpc_common.proto import (
|
|
|
39
39
|
from langgraph_sdk import Auth
|
|
40
40
|
from starlette.exceptions import HTTPException
|
|
41
41
|
|
|
42
|
-
from langgraph_api.asyncio import ValueEvent
|
|
42
|
+
from langgraph_api.asyncio import ValueEvent, create_task
|
|
43
43
|
from langgraph_api.auth.custom import handle_event as auth_handle_event
|
|
44
44
|
from langgraph_api.config import (
|
|
45
45
|
STREAM_PUBLISH_RETRY_BACKOFF_FACTOR,
|
|
@@ -229,6 +229,7 @@ class GrpcStreamHandler:
|
|
|
229
229
|
def __init__(self, run_id: UUID, thread_id: UUID):
|
|
230
230
|
self.run_id = run_id
|
|
231
231
|
self.thread_id = thread_id
|
|
232
|
+
self.join_requested = False
|
|
232
233
|
self._stream = None
|
|
233
234
|
self._closed = False
|
|
234
235
|
|
|
@@ -304,6 +305,8 @@ class GrpcStreamHandler:
|
|
|
304
305
|
# Send JoinRunRequest
|
|
305
306
|
join_msg = pb.StreamRunClientMessage(join=pb.JoinRunRequest(**join_kwargs))
|
|
306
307
|
await self._stream.write(join_msg)
|
|
308
|
+
# Only after the write: a write cancelled midway may never reach the core.
|
|
309
|
+
self.join_requested = True
|
|
307
310
|
|
|
308
311
|
# Half-close: signal we're done sending client messages.
|
|
309
312
|
# Required for bidirectional streaming so the server knows to stop
|
|
@@ -348,6 +351,36 @@ class GrpcStreamHandler:
|
|
|
348
351
|
await self.close()
|
|
349
352
|
|
|
350
353
|
|
|
354
|
+
async def _cancel_dropped_join(
|
|
355
|
+
run_id: UUID,
|
|
356
|
+
thread_id: UUID,
|
|
357
|
+
ctx: Any,
|
|
358
|
+
filters: list[pb.AuthFilter] | None,
|
|
359
|
+
) -> None:
|
|
360
|
+
# Same filters and reason as the core's own cancel when a joined stream drops.
|
|
361
|
+
# No filters means the drop interrupted the stream's own read check.
|
|
362
|
+
if filters is None:
|
|
363
|
+
filters = await Runs.Stream.handle_event(
|
|
364
|
+
ctx, "read", Auth.types.ThreadsRead(run_id=run_id, thread_id=thread_id)
|
|
365
|
+
)
|
|
366
|
+
client = await get_shared_client()
|
|
367
|
+
try:
|
|
368
|
+
await client.runs.Cancel(
|
|
369
|
+
pb.CancelRunRequest(
|
|
370
|
+
filters=filters,
|
|
371
|
+
action=enum_cancel_run_action.interrupt,
|
|
372
|
+
reason="client disconnected from the run stream (on_disconnect=cancel)",
|
|
373
|
+
run_ids=pb.CancelRunIdsTarget(
|
|
374
|
+
thread_id=pb.UUID(value=str(thread_id)),
|
|
375
|
+
run_ids=[pb.UUID(value=str(run_id))],
|
|
376
|
+
),
|
|
377
|
+
)
|
|
378
|
+
)
|
|
379
|
+
except AioRpcError as e:
|
|
380
|
+
if e.code() != StatusCode.NOT_FOUND:
|
|
381
|
+
raise
|
|
382
|
+
|
|
383
|
+
|
|
351
384
|
def _map_multitask_strategy(
|
|
352
385
|
strategy: MultitaskStrategy | None,
|
|
353
386
|
) -> enum_multitask_strategy.MultitaskStrategy | None:
|
|
@@ -1135,15 +1168,15 @@ class Runs(Authenticated):
|
|
|
1135
1168
|
Yields tuples of (event_bytes, message_bytes, stream_id_bytes|None).
|
|
1136
1169
|
"""
|
|
1137
1170
|
handler: GrpcStreamHandler = stream_channel
|
|
1138
|
-
auth_filters = await Runs.Stream.handle_event(
|
|
1139
|
-
ctx,
|
|
1140
|
-
"read",
|
|
1141
|
-
Auth.types.ThreadsRead(run_id=run_id, thread_id=thread_id),
|
|
1142
|
-
)
|
|
1143
|
-
|
|
1144
1171
|
stream_modes_pb = _map_stream_modes(stream_mode)
|
|
1172
|
+
auth_filters: list[pb.AuthFilter] | None = None
|
|
1145
1173
|
|
|
1146
1174
|
try:
|
|
1175
|
+
auth_filters = await Runs.Stream.handle_event(
|
|
1176
|
+
ctx,
|
|
1177
|
+
"read",
|
|
1178
|
+
Auth.types.ThreadsRead(run_id=run_id, thread_id=thread_id),
|
|
1179
|
+
)
|
|
1147
1180
|
async for event_bytes, message_bytes, stream_id_bytes in handler.join(
|
|
1148
1181
|
auth_filters=auth_filters,
|
|
1149
1182
|
stream_modes=stream_modes_pb or None,
|
|
@@ -1158,6 +1191,14 @@ class Runs(Authenticated):
|
|
|
1158
1191
|
return # Return empty stream
|
|
1159
1192
|
# Convert all other gRPC errors to HTTP exceptions
|
|
1160
1193
|
_handle_grpc_error(e)
|
|
1194
|
+
except asyncio.CancelledError:
|
|
1195
|
+
# The core can cancel on disconnect only after it receives the join request.
|
|
1196
|
+
if cancel_on_disconnect and not handler.join_requested:
|
|
1197
|
+
create_task(
|
|
1198
|
+
_cancel_dropped_join(run_id, thread_id, ctx, auth_filters),
|
|
1199
|
+
ignore_exceptions=(HTTPException,),
|
|
1200
|
+
)
|
|
1201
|
+
raise
|
|
1161
1202
|
finally:
|
|
1162
1203
|
await handler.close()
|
|
1163
1204
|
|
|
@@ -1198,6 +1239,8 @@ class Runs(Authenticated):
|
|
|
1198
1239
|
thread_id: UUID | str,
|
|
1199
1240
|
*,
|
|
1200
1241
|
resumable: bool = False,
|
|
1242
|
+
publisher_id: str | None = None,
|
|
1243
|
+
seq: int | None = None,
|
|
1201
1244
|
) -> None:
|
|
1202
1245
|
"""Publish a message to the run stream via gRPC.
|
|
1203
1246
|
|
|
@@ -1207,6 +1250,11 @@ class Runs(Authenticated):
|
|
|
1207
1250
|
message: Event payload (serialized JSON or raw bytes)
|
|
1208
1251
|
thread_id: The thread ID
|
|
1209
1252
|
resumable: If true, message will be cached with TTL for resumable streaming
|
|
1253
|
+
publisher_id: With `seq`, lets the Lua publish scripts drop a
|
|
1254
|
+
retried publish instead of adding it twice; publishes outside
|
|
1255
|
+
those scripts, such as a plain Pub/Sub publish, ignore both.
|
|
1256
|
+
Pass both or neither.
|
|
1257
|
+
seq: The event's number within the publisher; retries resend it
|
|
1210
1258
|
"""
|
|
1211
1259
|
run_id_pb = (
|
|
1212
1260
|
None if run_id is None or run_id == "*" else pb.UUID(value=str(run_id))
|
|
@@ -1218,6 +1266,8 @@ class Runs(Authenticated):
|
|
|
1218
1266
|
event_type=event,
|
|
1219
1267
|
message=message,
|
|
1220
1268
|
resumable=resumable,
|
|
1269
|
+
publisher_id=publisher_id,
|
|
1270
|
+
seq=seq,
|
|
1221
1271
|
)
|
|
1222
1272
|
max_duration_secs = max(0.0, STREAM_PUBLISH_RETRY_MAX_DURATION_SECS)
|
|
1223
1273
|
initial_interval_secs = max(
|
|
@@ -53,6 +53,7 @@ from langgraph_api.state import (
|
|
|
53
53
|
state_snapshot_to_thread_state,
|
|
54
54
|
)
|
|
55
55
|
from langgraph_api.utils import fetchone
|
|
56
|
+
from langgraph_api.utils.uuids import uuid7
|
|
56
57
|
|
|
57
58
|
if TYPE_CHECKING:
|
|
58
59
|
from collections.abc import AsyncIterator
|
|
@@ -618,6 +619,8 @@ class Threads(Authenticated):
|
|
|
618
619
|
conn, # Not used
|
|
619
620
|
thread_id: UUID | str,
|
|
620
621
|
ctx: Any = None,
|
|
622
|
+
*,
|
|
623
|
+
sync_checkpoint_delete: bool = False,
|
|
621
624
|
) -> AsyncIterator[UUID]:
|
|
622
625
|
auth_filters = await Threads.handle_event(
|
|
623
626
|
ctx,
|
|
@@ -630,6 +633,7 @@ class Threads(Authenticated):
|
|
|
630
633
|
request = pb.DeleteThreadRequest(
|
|
631
634
|
thread_id=pb.UUID(value=_normalize_uuid(thread_id)),
|
|
632
635
|
filters=auth_filters,
|
|
636
|
+
sync_checkpoint_delete=sync_checkpoint_delete,
|
|
633
637
|
)
|
|
634
638
|
|
|
635
639
|
client = await get_shared_client()
|
|
@@ -655,6 +659,8 @@ class Threads(Authenticated):
|
|
|
655
659
|
strategy: Literal["delete", "keep_latest"] = "delete",
|
|
656
660
|
batch_size: int = 100,
|
|
657
661
|
ctx: Any = None,
|
|
662
|
+
*,
|
|
663
|
+
sync_checkpoint_delete: bool = False,
|
|
658
664
|
) -> int:
|
|
659
665
|
"""Prune threads via gRPC.
|
|
660
666
|
|
|
@@ -663,6 +669,8 @@ class Threads(Authenticated):
|
|
|
663
669
|
strategy: "delete" to remove entirely, "keep_latest" to prune checkpoints
|
|
664
670
|
batch_size: Batch size for operations
|
|
665
671
|
ctx: Auth context for permission checks
|
|
672
|
+
sync_checkpoint_delete: Delete checkpoints before returning instead
|
|
673
|
+
of deferring to the background deletion queue
|
|
666
674
|
|
|
667
675
|
Returns:
|
|
668
676
|
Number of threads successfully pruned
|
|
@@ -709,6 +717,7 @@ class Threads(Authenticated):
|
|
|
709
717
|
pb.DeleteThreadRequest(
|
|
710
718
|
thread_id=pb.UUID(value=_normalize_uuid(tid)),
|
|
711
719
|
filters=auth_filters,
|
|
720
|
+
sync_checkpoint_delete=sync_checkpoint_delete,
|
|
712
721
|
)
|
|
713
722
|
)
|
|
714
723
|
except Exception:
|
|
@@ -739,6 +748,7 @@ class Threads(Authenticated):
|
|
|
739
748
|
request = checkpointer_pb2.PruneRequest(
|
|
740
749
|
thread_ids=batch,
|
|
741
750
|
strategy=checkpointer_pb2.PruneRequest.PruneStrategy.KEEP_LATEST,
|
|
751
|
+
sync_checkpoint_delete=sync_checkpoint_delete,
|
|
742
752
|
)
|
|
743
753
|
await stub.Prune(request)
|
|
744
754
|
processed += len(batch)
|
|
@@ -1241,6 +1251,8 @@ class Threads(Authenticated):
|
|
|
1241
1251
|
json_dumpb(event_data),
|
|
1242
1252
|
thread_id=thread_id,
|
|
1243
1253
|
resumable=True,
|
|
1254
|
+
publisher_id=uuid7().hex,
|
|
1255
|
+
seq=0,
|
|
1244
1256
|
)
|
|
1245
1257
|
|
|
1246
1258
|
return {
|
|
@@ -1346,6 +1358,8 @@ class Threads(Authenticated):
|
|
|
1346
1358
|
json_dumpb(event_data),
|
|
1347
1359
|
thread_id=thread_id,
|
|
1348
1360
|
resumable=True,
|
|
1361
|
+
publisher_id=uuid7().hex,
|
|
1362
|
+
seq=0,
|
|
1349
1363
|
)
|
|
1350
1364
|
|
|
1351
1365
|
return ThreadUpdateResponse(checkpoint=next_config["configurable"])
|
|
@@ -304,7 +304,7 @@ class RemotePregel(BaseRemotePregel):
|
|
|
304
304
|
"graph_config": self.config,
|
|
305
305
|
"graph_name": self.name,
|
|
306
306
|
"command" if isinstance(input, Command) else "input": input,
|
|
307
|
-
"config": config,
|
|
307
|
+
"config": self._with_execution_signal(config),
|
|
308
308
|
**kwargs,
|
|
309
309
|
}
|
|
310
310
|
|
|
@@ -339,7 +339,7 @@ class RemotePregel(BaseRemotePregel):
|
|
|
339
339
|
"graph_config": self.config,
|
|
340
340
|
"graph_name": self.name,
|
|
341
341
|
"command" if isinstance(input, Command) else "input": input,
|
|
342
|
-
"config": config,
|
|
342
|
+
"config": self._with_execution_signal(config),
|
|
343
343
|
"stream_protocol": "v3",
|
|
344
344
|
**kwargs,
|
|
345
345
|
}
|
|
@@ -564,6 +564,24 @@ class RemotePregel(BaseRemotePregel):
|
|
|
564
564
|
attrs = {**self.__dict__, **(update or {})}
|
|
565
565
|
return self.__class__(**attrs)
|
|
566
566
|
|
|
567
|
+
def _with_execution_signal(
|
|
568
|
+
self, config: RunnableConfig | None
|
|
569
|
+
) -> RunnableConfig | None:
|
|
570
|
+
# The sidecar builds a run's graph from the run config, not graph_config.
|
|
571
|
+
signal = ((self.config or {}).get("configurable") or {}).get(
|
|
572
|
+
"__is_for_execution__"
|
|
573
|
+
)
|
|
574
|
+
if signal is None:
|
|
575
|
+
return config
|
|
576
|
+
config = config or {}
|
|
577
|
+
return {
|
|
578
|
+
**config,
|
|
579
|
+
"configurable": {
|
|
580
|
+
**(config.get("configurable") or {}),
|
|
581
|
+
"__is_for_execution__": signal,
|
|
582
|
+
},
|
|
583
|
+
}
|
|
584
|
+
|
|
567
585
|
async def fetch_nodes_executed(self):
|
|
568
586
|
result = await _client_invoke("getNodesExecuted", {"graph_id": self.graph_id})
|
|
569
587
|
await logger.adebug(
|
|
@@ -57,8 +57,14 @@ elif PROJECT_ID:
|
|
|
57
57
|
HOST = "byoc"
|
|
58
58
|
else:
|
|
59
59
|
HOST = "self-hosted"
|
|
60
|
-
PLAN = "enterprise" if plus_features_enabled() else "developer"
|
|
61
60
|
USER_API_URL = os.getenv("LANGGRAPH_API_URL", None)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def current_plan() -> str:
|
|
64
|
+
# Read after license validation, which decides whether plus features are on.
|
|
65
|
+
return "enterprise" if plus_features_enabled() else "developer"
|
|
66
|
+
|
|
67
|
+
|
|
62
68
|
DEPENDENCY_VERSION_DISTRIBUTIONS = {
|
|
63
69
|
"langgraph.python.version": "langgraph",
|
|
64
70
|
"langgraph_checkpoint.version": "langgraph-checkpoint",
|
|
@@ -220,7 +226,7 @@ async def metadata_loop() -> None:
|
|
|
220
226
|
"langgraph.platform.host": HOST,
|
|
221
227
|
"langgraph.platform.tenant_id": TENANT_ID or "",
|
|
222
228
|
"langgraph.platform.project_id": PROJECT_ID or "",
|
|
223
|
-
"langgraph.platform.plan":
|
|
229
|
+
"langgraph.platform.plan": current_plan(),
|
|
224
230
|
# user app features
|
|
225
231
|
"user_app.uses_indexing": USES_INDEXING or "",
|
|
226
232
|
"user_app.uses_custom_app": USES_CUSTOM_APP or "",
|
{langgraph_api-0.19.0.dev3 → langgraph_api-0.19.0.dev4}/langgraph_api/middleware/ensure_store.py
RENAMED
|
@@ -13,6 +13,10 @@ class EnsureStoreAccessible:
|
|
|
13
13
|
self.app = app
|
|
14
14
|
|
|
15
15
|
async def __call__(self, scope: Scope, receive: Receive, send: Send):
|
|
16
|
+
# The store isn't ready until the lifespan has started.
|
|
17
|
+
if scope["type"] not in ("http", "websocket"):
|
|
18
|
+
await self.app(scope, receive, send)
|
|
19
|
+
return
|
|
16
20
|
global _CONFIG
|
|
17
21
|
if _CONFIG is None:
|
|
18
22
|
_CONFIG = await _get_partial_conf()
|
|
@@ -32,7 +32,10 @@ from langgraph_api.schema import (
|
|
|
32
32
|
RunCommand,
|
|
33
33
|
StreamMode,
|
|
34
34
|
)
|
|
35
|
-
from langgraph_api.tracing_session import
|
|
35
|
+
from langgraph_api.tracing_session import (
|
|
36
|
+
resolve_tracing_session_name,
|
|
37
|
+
tracer_destination,
|
|
38
|
+
)
|
|
36
39
|
from langgraph_api.utils import AsyncConnectionProto, get_auth_ctx, get_user_id
|
|
37
40
|
from langgraph_api.utils.headers import get_configurable_headers
|
|
38
41
|
from langgraph_api.utils.uuids import uuid7
|
|
@@ -55,6 +58,7 @@ class LangSmithTracer(TypedDict, total=False):
|
|
|
55
58
|
|
|
56
59
|
example_id: str | None
|
|
57
60
|
project_name: str | None
|
|
61
|
+
address: Mapping[str, str] | None
|
|
58
62
|
|
|
59
63
|
|
|
60
64
|
class RunCreateDict(TypedDict):
|
|
@@ -289,7 +293,12 @@ async def create_valid_run(
|
|
|
289
293
|
if not configurable.get("langgraph_request_id"):
|
|
290
294
|
configurable["langgraph_request_id"] = request_id
|
|
291
295
|
if ls_tracing := payload.get("langsmith_tracer"):
|
|
292
|
-
|
|
296
|
+
try:
|
|
297
|
+
ls_project, ls_address = tracer_destination(payload) or (None, None)
|
|
298
|
+
except ValueError as exc:
|
|
299
|
+
raise HTTPException(status_code=422, detail=str(exc)) from None
|
|
300
|
+
configurable["__langsmith_project__"] = ls_project
|
|
301
|
+
configurable["__langsmith_address__"] = ls_address
|
|
293
302
|
configurable["__langsmith_example_id__"] = ls_tracing.get("example_id")
|
|
294
303
|
if request_start_time:
|
|
295
304
|
configurable["__request_start_time_ms__"] = request_start_time
|
|
@@ -138,7 +138,8 @@ def _int_in_range(
|
|
|
138
138
|
|
|
139
139
|
def validate_priority_settings(result: Any) -> ThreadPrioritySettings:
|
|
140
140
|
"""The settings to store for the callback's result, with defaults for what it left out.
|
|
141
|
-
An empty fairness_group is the default group, like a missing one
|
|
141
|
+
An empty fairness_group is the default group, like a missing one, and a fairness_weight
|
|
142
|
+
is dropped with a warning.
|
|
142
143
|
|
|
143
144
|
Raises:
|
|
144
145
|
HTTPException(500): the result isn't a dict or None, has an unknown key, or has a
|
|
@@ -148,6 +149,16 @@ def validate_priority_settings(result: Any) -> ThreadPrioritySettings:
|
|
|
148
149
|
result = {}
|
|
149
150
|
if not isinstance(result, dict):
|
|
150
151
|
raise _invalid(f"a {type(result).__name__}, not a dict or None")
|
|
152
|
+
if "fairness_weight" in result:
|
|
153
|
+
# langgraph-sdk 0.4.9 to 0.4.11 type the result with a fairness_weight, which the
|
|
154
|
+
# server never stores, so callbacks written against them may still return it.
|
|
155
|
+
result = {
|
|
156
|
+
key: value for key, value in result.items() if key != "fairness_weight"
|
|
157
|
+
}
|
|
158
|
+
logger.warning(
|
|
159
|
+
"Priority callback returned fairness_weight, which has no effect and is"
|
|
160
|
+
" ignored; remove it from the callback's result"
|
|
161
|
+
)
|
|
151
162
|
unknown = sorted(set(result) - set(ThreadPrioritySettings.__annotations__))
|
|
152
163
|
if unknown:
|
|
153
164
|
raise _invalid(f"unknown keys {unknown}")
|
|
@@ -14,6 +14,7 @@ from ipaddress import (
|
|
|
14
14
|
IPv6Interface,
|
|
15
15
|
IPv6Network,
|
|
16
16
|
)
|
|
17
|
+
from itertools import pairwise
|
|
17
18
|
from pathlib import Path
|
|
18
19
|
from re import Pattern
|
|
19
20
|
from typing import Any, Literal, NamedTuple, cast, overload
|
|
@@ -184,7 +185,15 @@ def json_dumpb(obj) -> bytes:
|
|
|
184
185
|
# Replace with U+FFFD (replacement character) instead of stripping,
|
|
185
186
|
# so that "key\x00" becomes "key\uFFFD" rather than "key" — preventing
|
|
186
187
|
# a poisoned key from projecting onto a legitimate one.
|
|
187
|
-
|
|
188
|
+
parts = dumped.split(rb"\u0000")
|
|
189
|
+
out = [parts[0]]
|
|
190
|
+
for before, after in pairwise(parts):
|
|
191
|
+
# After an odd run of backslashes, \u0000 is the text "\u0000" (its
|
|
192
|
+
# backslash escaped), not a NUL character.
|
|
193
|
+
backslashes = len(before) - len(before.rstrip(b"\\"))
|
|
194
|
+
out.append(rb"\u0000" if backslashes % 2 else rb"\ufffd")
|
|
195
|
+
out.append(after)
|
|
196
|
+
return b"".join(out)
|
|
188
197
|
|
|
189
198
|
|
|
190
199
|
def json_loads(content: bytes | Fragment | dict) -> Any:
|