langgraph-api 0.15.0.dev5__tar.gz → 0.16.0.dev1__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.15.0.dev5 → langgraph_api-0.16.0.dev1}/.gitignore +1 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/Makefile +4 -6
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/PKG-INFO +2 -2
- langgraph_api-0.16.0.dev1/benchmark/multer.test.js +115 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/package.json +6 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/yarn.lock +37 -80
- langgraph_api-0.16.0.dev1/langgraph_api/__init__.py +1 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/api/a2a.py +56 -12
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/api/a2ui.py +18 -8
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/api/mcp/_handlers.py +3 -1
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/langsmith/backend.py +2 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/studio_user.py +6 -1
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/config/__init__.py +36 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/cron_scheduler.py +1 -1
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/encryption/middleware.py +4 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/graph.py +14 -2
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/client.mts +18 -6
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/package.json +3 -3
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/yarn.lock +103 -158
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/metrics_collector.py +6 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/release_tags.py +35 -17
- langgraph_api-0.16.0.dev1/langgraph_api/runner/__init__.py +10 -0
- langgraph_api-0.16.0.dev1/langgraph_api/runner/__main__.py +275 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/self_hosted_logs.py +4 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/worker.py +36 -163
- langgraph_api-0.16.0.dev1/langgraph_api/worker_runtime.py +221 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/__init__.py +4 -0
- langgraph_api-0.16.0.dev1/langgraph_grpc_common/proto/runner_pb2.py +50 -0
- langgraph_api-0.16.0.dev1/langgraph_grpc_common/proto/runner_pb2.pyi +167 -0
- langgraph_api-0.16.0.dev1/langgraph_grpc_common/proto/runner_pb2_grpc.py +108 -0
- langgraph_api-0.16.0.dev1/langgraph_grpc_common/proto/runner_pb2_grpc.pyi +73 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/pyproject.toml +1 -1
- langgraph_api-0.15.0.dev5/langgraph_api/__init__.py +0 -1
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/LICENSE +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/README.md +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/.gitignore +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/Makefile +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/README.md +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/assistant.ts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/benchmark-runner.ts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/benchmark_profiles.ts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/benchmarks.ts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/cancel_first_second_completes.ts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/classify-error.test.js +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/classify-error.ts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/delta-turns-lib.test.js +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/delta-turns-lib.ts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/delta_turns.ts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/enqueued_runs_order.ts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/log-failure.ts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/meta_workload.ts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/store.ts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/stream_write.ts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/thread.ts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/thread_runs_metadata_search.ts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/threads_search_metadata.ts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/types.ts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/benchmark-runners/wait_write.ts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/capacity-ci.js +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/capacity-ci.test.js +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/clean-cli.js +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/clean.js +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/continuous/README.md +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/continuous/pyproject.toml +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/continuous/runner.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/continuous/uv.lock +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/daily-report.js +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/daily-report.test.js +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/graphs.js +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/host-v2.js +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/host-v2.test.js +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/ramp.js +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/reporting/dd_reporting.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/staircase.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/staircase_step_k6.js +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/tsconfig.json +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/update-revision.js +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/benchmark/weather.js +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/constraints.txt +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/custom_store.sql +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/forbidden.txt +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/hatch_build.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/healthcheck.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph-cloud-debugging-20260210132856.zip +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/_checkpointer/__init__.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/_checkpointer/_adapter.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/_checkpointer/protocol.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/_factory_utils.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/api/__init__.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/api/a2ui_schemas/README.md +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/api/a2ui_schemas/client_capabilities.json +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/api/a2ui_schemas/client_data_model.json +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/api/a2ui_schemas/client_to_server.json +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/api/a2ui_schemas/server_to_client.json +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/api/assistants.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/api/event_streaming.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/api/mcp/__init__.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/api/mcp/_constants.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/api/mcp/_models.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/api/mcp/_routes.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/api/mcp/_sanitizers.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/api/meta.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/api/openapi.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/api/profile.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/api/runs.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/api/store.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/api/threads.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/api/ui.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/asgi_transport.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/asyncio.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/__init__.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/custom.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/errors.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/langsmith/__init__.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/langsmith/client.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/middleware.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/auth/noop.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/beacon_data_plane_jwt_auth.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/cache.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/cli.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/command.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/config/_parse.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/config/schemas.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/encryption/__init__.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/encryption/aes_json.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/encryption/context.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/encryption/custom.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/encryption/shared.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/errors.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/__init__.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/capabilities.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/constants.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/event_normalizers.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/namespace.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/service.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/session.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/state_normalizers.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/event_streaming/types.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/feature_flags.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/__init__.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/client.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/ops/__init__.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/ops/assistants.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/ops/cache.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/ops/crons.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/ops/runs.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/ops/threads.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/server.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/servicers/__init__.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/servicers/checkpointer.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/grpc/servicers/encryption.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/http.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/http_metrics.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/http_metrics_utils.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/.gitignore +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/.prettierrc +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/.yarnclean +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/__init__.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/base.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/build.mts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/client.http.mts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/errors.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/global.d.ts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/remote.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/schema.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/src/graph.mts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/src/load.hooks.mjs +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/src/preload.mjs +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/src/utils/experiment-tracing.mts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/src/utils/files.mts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/src/utils/importMap.mts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/src/utils/serde.mts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/sse.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/traceblock.mts +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/tsconfig.json +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/js/ui.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/lc_security/__init__.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/lc_security/exceptions.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/lc_security/policy.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/lc_security/transport.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/logging.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/metadata.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/metrics_otlp.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/middleware/__init__.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/middleware/ensure_store.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/middleware/http_logger.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/middleware/private_network.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/middleware/request_id.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/models/__init__.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/models/run.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/otel_context.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/patch.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/queue_entrypoint.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/route.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/schema.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/self_hosted_metrics.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/serde.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/server.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/sse.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/state.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/store.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/stream.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/stream_v2.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/timing/__init__.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/timing/profiler.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/timing/timer.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/traceblock.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/tracing_session.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/tunneling/cloudflare.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/__init__.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/cache.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/config.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/errors.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/extract.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/future.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/headers.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/network.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/retriable_client.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/stream_codec.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/utils/uuids.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/validation.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_api/webhook.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/__init__.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/checkpointer.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/conversion/__init__.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/conversion/_compat.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/conversion/checkpoint.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/conversion/config.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/conversion/durability.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/conversion/store.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/conversion/struct.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/conversion/value.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/checkpointer_pb2.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/core_api_pb2.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/core_api_pb2.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/encryption_pb2.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/engine_common_pb2.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/errors_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/store_pb2.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/store_pb2.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/store_pb2_grpc.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/proto/store_pb2_grpc.pyi +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/serde.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_grpc_common/store.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_license/__init__.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_license/validation.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_runtime/__init__.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_runtime/checkpoint.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_runtime/database.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_runtime/lifespan.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_runtime/metrics.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_runtime/ops.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_runtime/queue.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_runtime/retry.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_runtime/routes.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/langgraph_runtime/store.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/logging.json +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/openapi.json +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/scripts/build_wheel.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/scripts/create_license.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/scripts/run_a2a_tck.py +0 -0
- {langgraph_api-0.15.0.dev5 → langgraph_api-0.16.0.dev1}/uv.lock +0 -0
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
.PHONY: build release lint format test test_watch start start-inmem start-inmem-license-oss start build-go-server start-go-server stop-go-server check-version check-base-imports test-a2a-tck test-a2a-tck-must test-a2a-tck-propose-baseline start-test-a2a-tck start-test-a2a-tck-must start-test-a2a-tck-watch test-mcp-conformance start-test-mcp-conformance list-mcp-scenarios test-auth-read-only-assistant
|
|
2
2
|
|
|
3
|
-
|
|
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", "benchmark_delta": "./tests/graphs/benchmark.py:graph_delta", "benchmark_delta_freq": "./tests/graphs/benchmark.py:graph_delta_freq", "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", "agent_tool_stream": "./tests/graphs/agent_tool_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", "agent_metrics_stream": "./tests/graphs/agent_metrics_stream.py:graph", "agent_multimodal_stream": "./tests/graphs/agent_multimodal_stream.py:graph", "agent_bedtime_story": "./tests/graphs/agent_bedtime_story.py:graph", "delta_channel": "./tests/graphs/delta_channel.py:graph", "delta_channel_freq": "./tests/graphs/delta_channel_freq.py:graph", "delta_channel_files": "./tests/graphs/delta_channel_files.py:graph", "delta_channel_files_freq": "./tests/graphs/delta_channel_files_freq.py:graph", "delta_channel_legacy": "./tests/graphs/delta_channel_migration.py:graph_legacy", "delta_channel_delta": "./tests/graphs/delta_channel_migration.py:graph_delta", "delta_channel_delta_filter": "./tests/graphs/delta_channel_migration.py:graph_delta_filter", "delta_channel_messages_freq": "./tests/graphs/delta_channel_messages.py:graph_freq", "delta_channel_messages": "./tests/graphs/delta_channel_messages.py:graph", "delta_channel_messages_legacy": "./tests/graphs/delta_channel_messages.py:graph_legacy", "delta_channel_messages_remove": "./tests/graphs/delta_channel_messages.py:graph_remove", "delta_channel_messages_update": "./tests/graphs/delta_channel_messages.py:graph_update", "delta_channel_messages_delta": "./tests/graphs/delta_channel_messages.py:graph_delta", "store_e2e_async": "./tests/graphs/store_e2e.py:graph_async", "store_e2e_sync": "./tests/graphs/store_e2e.py:graph_sync"}'
|
|
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"}'
|
|
3
|
+
LANGSERVE_GRAPHS_ALL := '$(shell uv run python tests/graphs/configure_langgraph.py --path-prefix ./tests/graphs --emit langserve-env)'
|
|
6
4
|
|
|
7
5
|
# Go server management
|
|
8
6
|
build-go-server:
|
|
@@ -238,7 +236,7 @@ start-auth-jwt:
|
|
|
238
236
|
LANGGRAPH_RUNTIME_EDITION=inmem LANGGRAPH_HTTP='$(HTTP_CONFIG)' \
|
|
239
237
|
LANGGRAPH_AES_KEY='$(LANGGRAPH_AES_KEY)' \
|
|
240
238
|
N_JOBS_PER_WORKER=10 \
|
|
241
|
-
LANGSERVE_GRAPHS=$(
|
|
239
|
+
LANGSERVE_GRAPHS=$(LANGSERVE_GRAPHS_ALL) \
|
|
242
240
|
LANGGRAPH_STORE='$(STORE_CONFIG)' \
|
|
243
241
|
LANGGRAPH_CHECKPOINTER='$(CHECKPOINTER_CONFIG)' \
|
|
244
242
|
LANGGRAPH_AUTH='$(LANGGRAPH_AUTH)' \
|
|
@@ -255,7 +253,7 @@ start-auth-jwt:
|
|
|
255
253
|
start-auth-fastapi-jwt:
|
|
256
254
|
LANGGRAPH_RUNTIME_EDITION=inmem LANGGRAPH_HTTP='$(HTTP_CONFIG)' \
|
|
257
255
|
N_JOBS_PER_WORKER=10 \
|
|
258
|
-
LANGSERVE_GRAPHS=$(
|
|
256
|
+
LANGSERVE_GRAPHS=$(LANGSERVE_GRAPHS_ALL) \
|
|
259
257
|
LANGGRAPH_STORE='$(STORE_CONFIG)' \
|
|
260
258
|
LANGGRAPH_CHECKPOINTER='$(CHECKPOINTER_CONFIG)' \
|
|
261
259
|
LANGGRAPH_AUTH='{"path": "./tests/graphs/fastapi_jwt_auth.py:auth"}' \
|
|
@@ -280,7 +278,7 @@ define RUN_FASTAPI_JWT_MW_ORDERING
|
|
|
280
278
|
LANGGRAPH_RUNTIME_EDITION=inmem \
|
|
281
279
|
LANGGRAPH_HTTP='{"app": "./tests/graphs/fastapi_jwt_middleware_ordering.py:app", "middleware_order": "$(1)", "enable_custom_route_auth": $(2)}' \
|
|
282
280
|
N_JOBS_PER_WORKER=10 \
|
|
283
|
-
LANGSERVE_GRAPHS=$(
|
|
281
|
+
LANGSERVE_GRAPHS=$(LANGSERVE_GRAPHS_ALL) \
|
|
284
282
|
LANGGRAPH_STORE='$(STORE_CONFIG)' \
|
|
285
283
|
LANGGRAPH_CHECKPOINTER='$(CHECKPOINTER_CONFIG)' \
|
|
286
284
|
LANGGRAPH_AUTH='{"path": "./tests/graphs/fastapi_jwt_middleware_ordering.py:auth"}' \
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: langgraph-api
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.16.0.dev1
|
|
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
|
|
@@ -16,7 +16,7 @@ Requires-Dist: jsonschema-rs<0.45,>=0.20.0
|
|
|
16
16
|
Requires-Dist: langchain-core>=0.3.64
|
|
17
17
|
Requires-Dist: langchain-protocol<0.1,>=0.0.18
|
|
18
18
|
Requires-Dist: langgraph-checkpoint<5,>=3.0.1
|
|
19
|
-
Requires-Dist: langgraph-runtime-inmem<0.
|
|
19
|
+
Requires-Dist: langgraph-runtime-inmem<0.37.0.dev0,>=0.36.0.dev0
|
|
20
20
|
Requires-Dist: langgraph-sdk>=0.4.4
|
|
21
21
|
Requires-Dist: langgraph<2,>=0.4.10
|
|
22
22
|
Requires-Dist: langsmith[otel]>=0.6.3
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import { mkdtemp, readFile, rm } from "node:fs/promises";
|
|
3
|
+
import { createRequire } from "node:module";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import { Readable } from "node:stream";
|
|
7
|
+
import test from "node:test";
|
|
8
|
+
|
|
9
|
+
// Check the copy NestJS actually loads, including nested dependency installs.
|
|
10
|
+
const require = createRequire(import.meta.url);
|
|
11
|
+
const nestRequire = createRequire(
|
|
12
|
+
require.resolve("@nestjs/platform-express/package.json"),
|
|
13
|
+
);
|
|
14
|
+
const multer = nestRequire("multer");
|
|
15
|
+
|
|
16
|
+
function upload(middleware, fields = [{ name: "file", content: "benchmark" }]) {
|
|
17
|
+
const boundary = "benchmark-multer-test";
|
|
18
|
+
const body = Buffer.from(
|
|
19
|
+
fields
|
|
20
|
+
.map(
|
|
21
|
+
({ name, content }) =>
|
|
22
|
+
`--${boundary}\r\nContent-Disposition: form-data; name="${name}"; filename="result.txt"\r\nContent-Type: text/plain\r\n\r\n${content}\r\n`,
|
|
23
|
+
)
|
|
24
|
+
.join("") + `--${boundary}--\r\n`,
|
|
25
|
+
);
|
|
26
|
+
const req = Readable.from([body]);
|
|
27
|
+
req.headers = {
|
|
28
|
+
"content-type": `multipart/form-data; boundary=${boundary}`,
|
|
29
|
+
"content-length": String(body.length),
|
|
30
|
+
};
|
|
31
|
+
return new Promise((resolve, reject) => {
|
|
32
|
+
middleware(req, {}, (error) => (error ? reject(error) : resolve(req)));
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
test("NestJS resolves patched Multer 2.x", () => {
|
|
37
|
+
const [major, minor] = nestRequire("multer/package.json")
|
|
38
|
+
.version.split(".")
|
|
39
|
+
.map(Number);
|
|
40
|
+
assert.equal(major, 2);
|
|
41
|
+
assert.ok(
|
|
42
|
+
minor >= 3,
|
|
43
|
+
"Multer must be >=2.3.0 to address the benchmark alerts",
|
|
44
|
+
);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test("single uploads preserve memory storage and fileFilter callbacks", async () => {
|
|
48
|
+
let filtered = false;
|
|
49
|
+
const req = await upload(
|
|
50
|
+
multer({
|
|
51
|
+
limits: { fileSize: 1024, files: 1, fields: 1 },
|
|
52
|
+
fileFilter: (_req, file, done) => {
|
|
53
|
+
filtered = true;
|
|
54
|
+
assert.equal(file.originalname, "result.txt");
|
|
55
|
+
done(null, true);
|
|
56
|
+
},
|
|
57
|
+
}).single("file"),
|
|
58
|
+
);
|
|
59
|
+
assert.ok(filtered);
|
|
60
|
+
assert.equal(req.file.buffer.toString(), "benchmark");
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
for (const mode of ["array", "fields", "any"]) {
|
|
64
|
+
test(`${mode} uploads preserve the API used by NestJS interceptors`, async () => {
|
|
65
|
+
const parser = multer({ limits: { fileSize: 1024, files: 1 } });
|
|
66
|
+
const middleware =
|
|
67
|
+
mode === "array"
|
|
68
|
+
? parser.array("file", 1)
|
|
69
|
+
: mode === "fields"
|
|
70
|
+
? parser.fields([{ name: "file", maxCount: 1 }])
|
|
71
|
+
: parser.any();
|
|
72
|
+
const req = await upload(middleware);
|
|
73
|
+
const files = mode === "fields" ? req.files.file : req.files;
|
|
74
|
+
assert.equal(files.length, 1);
|
|
75
|
+
assert.equal(files[0].buffer.toString(), "benchmark");
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
test("disk storage preserves uploaded file contents", async () => {
|
|
80
|
+
const directory = await mkdtemp(path.join(tmpdir(), "benchmark-multer-"));
|
|
81
|
+
try {
|
|
82
|
+
const req = await upload(
|
|
83
|
+
multer({ dest: directory, limits: { fileSize: 1024 } }).single("file"),
|
|
84
|
+
);
|
|
85
|
+
assert.equal(await readFile(req.file.path, "utf8"), "benchmark");
|
|
86
|
+
} finally {
|
|
87
|
+
await rm(directory, { recursive: true, force: true });
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
test("oversized files still return a MulterError", async () => {
|
|
92
|
+
await assert.rejects(
|
|
93
|
+
upload(multer({ limits: { fileSize: 2 } }).single("file")),
|
|
94
|
+
(error) =>
|
|
95
|
+
error instanceof multer.MulterError && error.code === "LIMIT_FILE_SIZE",
|
|
96
|
+
);
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
test("unexpected fields still return a MulterError", async () => {
|
|
100
|
+
await assert.rejects(
|
|
101
|
+
upload(multer().single("expected")),
|
|
102
|
+
(error) =>
|
|
103
|
+
error instanceof multer.MulterError &&
|
|
104
|
+
error.code === "LIMIT_UNEXPECTED_FILE",
|
|
105
|
+
);
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
test("fileFilter rejection does not retain a file", async () => {
|
|
109
|
+
const req = await upload(
|
|
110
|
+
multer({ fileFilter: (_req, _file, done) => done(null, false) }).single(
|
|
111
|
+
"file",
|
|
112
|
+
),
|
|
113
|
+
);
|
|
114
|
+
assert.equal(req.file, undefined);
|
|
115
|
+
});
|
|
@@ -108,7 +108,7 @@ buffer-from@^1.0.0:
|
|
|
108
108
|
resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5"
|
|
109
109
|
integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==
|
|
110
110
|
|
|
111
|
-
busboy@^1.
|
|
111
|
+
busboy@^1.6.0:
|
|
112
112
|
version "1.6.0"
|
|
113
113
|
resolved "https://registry.yarnpkg.com/busboy/-/busboy-1.6.0.tgz#966ea36a9502e43cdb9146962523b92f531f6893"
|
|
114
114
|
integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==
|
|
@@ -136,14 +136,14 @@ call-bound@^1.0.2:
|
|
|
136
136
|
call-bind-apply-helpers "^1.0.2"
|
|
137
137
|
get-intrinsic "^1.3.0"
|
|
138
138
|
|
|
139
|
-
concat-stream@^
|
|
140
|
-
version "
|
|
141
|
-
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-
|
|
142
|
-
integrity sha512-
|
|
139
|
+
concat-stream@^2.0.0:
|
|
140
|
+
version "2.0.0"
|
|
141
|
+
resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1"
|
|
142
|
+
integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==
|
|
143
143
|
dependencies:
|
|
144
144
|
buffer-from "^1.0.0"
|
|
145
145
|
inherits "^2.0.3"
|
|
146
|
-
readable-stream "^
|
|
146
|
+
readable-stream "^3.0.2"
|
|
147
147
|
typedarray "^0.0.6"
|
|
148
148
|
|
|
149
149
|
content-disposition@0.5.4:
|
|
@@ -173,11 +173,6 @@ cookie@~0.4.1:
|
|
|
173
173
|
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432"
|
|
174
174
|
integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==
|
|
175
175
|
|
|
176
|
-
core-util-is@~1.0.0:
|
|
177
|
-
version "1.0.3"
|
|
178
|
-
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85"
|
|
179
|
-
integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==
|
|
180
|
-
|
|
181
176
|
cors@2.8.5:
|
|
182
177
|
version "2.8.5"
|
|
183
178
|
resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29"
|
|
@@ -416,7 +411,7 @@ iconv-lite@0.4.24:
|
|
|
416
411
|
dependencies:
|
|
417
412
|
safer-buffer ">= 2.1.2 < 3"
|
|
418
413
|
|
|
419
|
-
inherits@2.0.4, inherits@^2.0.3
|
|
414
|
+
inherits@2.0.4, inherits@^2.0.3:
|
|
420
415
|
version "2.0.4"
|
|
421
416
|
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
|
422
417
|
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
|
@@ -426,11 +421,6 @@ ipaddr.js@1.9.1:
|
|
|
426
421
|
resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
|
|
427
422
|
integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
|
|
428
423
|
|
|
429
|
-
isarray@~1.0.0:
|
|
430
|
-
version "1.0.0"
|
|
431
|
-
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
|
|
432
|
-
integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==
|
|
433
|
-
|
|
434
424
|
javascript-stringify@^2.1.0:
|
|
435
425
|
version "2.1.0"
|
|
436
426
|
resolved "https://registry.yarnpkg.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz#27c76539be14d8bd128219a2d731b09337904e79"
|
|
@@ -473,18 +463,6 @@ mime@1.6.0:
|
|
|
473
463
|
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
|
|
474
464
|
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
|
|
475
465
|
|
|
476
|
-
minimist@^1.2.6:
|
|
477
|
-
version "1.2.8"
|
|
478
|
-
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
|
|
479
|
-
integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
|
|
480
|
-
|
|
481
|
-
mkdirp@^0.5.4:
|
|
482
|
-
version "0.5.6"
|
|
483
|
-
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6"
|
|
484
|
-
integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==
|
|
485
|
-
dependencies:
|
|
486
|
-
minimist "^1.2.6"
|
|
487
|
-
|
|
488
466
|
ms@2.0.0:
|
|
489
467
|
version "2.0.0"
|
|
490
468
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
|
|
@@ -495,18 +473,15 @@ ms@2.1.3, ms@^2.1.3:
|
|
|
495
473
|
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
|
|
496
474
|
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
|
|
497
475
|
|
|
498
|
-
multer@1.4.4-lts.1:
|
|
499
|
-
version "
|
|
500
|
-
resolved "https://registry.yarnpkg.com/multer/-/multer-
|
|
501
|
-
integrity sha512-
|
|
476
|
+
multer@1.4.4-lts.1, multer@^2.3.0:
|
|
477
|
+
version "2.3.0"
|
|
478
|
+
resolved "https://registry.yarnpkg.com/multer/-/multer-2.3.0.tgz#46f5a98c34e09661ff089fa49ae487846bd5b4fd"
|
|
479
|
+
integrity sha512-cjNbm3sttszgZeGfJR124D+jFEfkXCVAsoPBmFn9X7UxmDSFHWqE2CoEj0vrmSpuAFnqWR1Szcm9QTsiHr60Xw==
|
|
502
480
|
dependencies:
|
|
503
481
|
append-field "^1.0.0"
|
|
504
|
-
busboy "^1.
|
|
505
|
-
concat-stream "^
|
|
506
|
-
|
|
507
|
-
object-assign "^4.1.1"
|
|
508
|
-
type-is "^1.6.4"
|
|
509
|
-
xtend "^4.0.0"
|
|
482
|
+
busboy "^1.6.0"
|
|
483
|
+
concat-stream "^2.0.0"
|
|
484
|
+
type-is "^1.6.18"
|
|
510
485
|
|
|
511
486
|
negotiator@0.6.3:
|
|
512
487
|
version "0.6.3"
|
|
@@ -522,7 +497,7 @@ nodeplotlib@^1.0.4:
|
|
|
522
497
|
"@nestjs/platform-socket.io" "^8.2.3"
|
|
523
498
|
"@types/plotly.js" "^1.54.17"
|
|
524
499
|
|
|
525
|
-
object-assign@^4
|
|
500
|
+
object-assign@^4:
|
|
526
501
|
version "4.1.1"
|
|
527
502
|
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
|
528
503
|
integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==
|
|
@@ -549,11 +524,6 @@ path-to-regexp@0.1.7:
|
|
|
549
524
|
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c"
|
|
550
525
|
integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==
|
|
551
526
|
|
|
552
|
-
process-nextick-args@~2.0.0:
|
|
553
|
-
version "2.0.1"
|
|
554
|
-
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
|
|
555
|
-
integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
|
|
556
|
-
|
|
557
527
|
proxy-addr@~2.0.7:
|
|
558
528
|
version "2.0.7"
|
|
559
529
|
resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025"
|
|
@@ -562,12 +532,13 @@ proxy-addr@~2.0.7:
|
|
|
562
532
|
forwarded "0.2.0"
|
|
563
533
|
ipaddr.js "1.9.1"
|
|
564
534
|
|
|
565
|
-
qs@6.10.3:
|
|
566
|
-
version "6.
|
|
567
|
-
resolved "https://registry.yarnpkg.com/qs/-/qs-6.
|
|
568
|
-
integrity sha512-
|
|
535
|
+
qs@6.10.3, qs@>=6.16.0:
|
|
536
|
+
version "6.16.0"
|
|
537
|
+
resolved "https://registry.yarnpkg.com/qs/-/qs-6.16.0.tgz#c22c723a28a920f3aacdce8289fabd43eccb79fd"
|
|
538
|
+
integrity sha512-h6fhOIaRrID2CbEY2fqs+7t+UXZo+MLAnU5gRIq85uFtdiUPCdsApMlHhXogKVM4HM2DVbIjGNTTYH2OcmP1vA==
|
|
569
539
|
dependencies:
|
|
570
|
-
|
|
540
|
+
es-define-property "^1.0.1"
|
|
541
|
+
side-channel "^1.1.1"
|
|
571
542
|
|
|
572
543
|
quickchart-js@^4.0.0:
|
|
573
544
|
version "4.0.0"
|
|
@@ -591,29 +562,20 @@ raw-body@2.5.1:
|
|
|
591
562
|
iconv-lite "0.4.24"
|
|
592
563
|
unpipe "1.0.0"
|
|
593
564
|
|
|
594
|
-
readable-stream@^
|
|
595
|
-
version "
|
|
596
|
-
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-
|
|
597
|
-
integrity sha512-
|
|
565
|
+
readable-stream@^3.0.2:
|
|
566
|
+
version "3.6.2"
|
|
567
|
+
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
|
|
568
|
+
integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
|
|
598
569
|
dependencies:
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
process-nextick-args "~2.0.0"
|
|
603
|
-
safe-buffer "~5.1.1"
|
|
604
|
-
string_decoder "~1.1.1"
|
|
605
|
-
util-deprecate "~1.0.1"
|
|
570
|
+
inherits "^2.0.3"
|
|
571
|
+
string_decoder "^1.1.1"
|
|
572
|
+
util-deprecate "^1.0.1"
|
|
606
573
|
|
|
607
|
-
safe-buffer@5.2.1:
|
|
574
|
+
safe-buffer@5.2.1, safe-buffer@~5.2.0:
|
|
608
575
|
version "5.2.1"
|
|
609
576
|
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
|
|
610
577
|
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
|
|
611
578
|
|
|
612
|
-
safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
|
613
|
-
version "5.1.2"
|
|
614
|
-
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
|
|
615
|
-
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
|
|
616
|
-
|
|
617
579
|
"safer-buffer@>= 2.1.2 < 3":
|
|
618
580
|
version "2.1.2"
|
|
619
581
|
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
|
@@ -682,7 +644,7 @@ side-channel-weakmap@^1.0.2:
|
|
|
682
644
|
object-inspect "^1.13.3"
|
|
683
645
|
side-channel-map "^1.0.1"
|
|
684
646
|
|
|
685
|
-
side-channel@^1.
|
|
647
|
+
side-channel@^1.1.1:
|
|
686
648
|
version "1.1.1"
|
|
687
649
|
resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.1.tgz#ea02c62e05dc4bea67d4442f0fb71ee192f8e0ab"
|
|
688
650
|
integrity sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==
|
|
@@ -728,12 +690,12 @@ streamsearch@^1.1.0:
|
|
|
728
690
|
resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764"
|
|
729
691
|
integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==
|
|
730
692
|
|
|
731
|
-
string_decoder
|
|
732
|
-
version "1.
|
|
733
|
-
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.
|
|
734
|
-
integrity sha512-
|
|
693
|
+
string_decoder@^1.1.1:
|
|
694
|
+
version "1.3.0"
|
|
695
|
+
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
|
|
696
|
+
integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
|
|
735
697
|
dependencies:
|
|
736
|
-
safe-buffer "~5.
|
|
698
|
+
safe-buffer "~5.2.0"
|
|
737
699
|
|
|
738
700
|
toidentifier@1.0.1:
|
|
739
701
|
version "1.0.1"
|
|
@@ -745,7 +707,7 @@ tslib@2.4.0:
|
|
|
745
707
|
resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3"
|
|
746
708
|
integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==
|
|
747
709
|
|
|
748
|
-
type-is@^1.6.
|
|
710
|
+
type-is@^1.6.18, type-is@~1.6.18:
|
|
749
711
|
version "1.6.18"
|
|
750
712
|
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131"
|
|
751
713
|
integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
|
|
@@ -773,7 +735,7 @@ unpipe@1.0.0, unpipe@~1.0.0:
|
|
|
773
735
|
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
|
|
774
736
|
integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==
|
|
775
737
|
|
|
776
|
-
util-deprecate
|
|
738
|
+
util-deprecate@^1.0.1:
|
|
777
739
|
version "1.0.2"
|
|
778
740
|
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
|
|
779
741
|
integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
|
|
@@ -792,8 +754,3 @@ ws@~8.2.3:
|
|
|
792
754
|
version "8.2.3"
|
|
793
755
|
resolved "https://registry.yarnpkg.com/ws/-/ws-8.2.3.tgz#63a56456db1b04367d0b721a0b80cae6d8becbba"
|
|
794
756
|
integrity sha512-wBuoj1BDpC6ZQ1B7DWQBYVLphPWkm8i9Y0/3YdHjHKHiohOJ1ws+3OccDWtH+PoC9DZD5WOTrJvNbWvjS6JWaA==
|
|
795
|
-
|
|
796
|
-
xtend@^4.0.0:
|
|
797
|
-
version "4.0.2"
|
|
798
|
-
resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"
|
|
799
|
-
integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.16.0.dev1"
|
|
@@ -55,6 +55,8 @@ MAX_HISTORY_LENGTH_REQUESTED = 10
|
|
|
55
55
|
LANGGRAPH_HISTORY_QUERY_LIMIT = 500
|
|
56
56
|
HISTORY_SCOPE_EXTENSION_URI = "https://langchain.com/a2a/extensions/history-scope/v1"
|
|
57
57
|
HISTORY_SCOPE_HEADER = "LangGraph-A2A-History-Scope"
|
|
58
|
+
A2A_EXTENSIONS_HEADER = "A2A-Extensions"
|
|
59
|
+
A2UI_EXTENSIONS_HEADER = "X-A2A-Extensions"
|
|
58
60
|
HistoryScope = Literal["context", "task"]
|
|
59
61
|
|
|
60
62
|
|
|
@@ -123,6 +125,7 @@ class A2UIContext:
|
|
|
123
125
|
metadata: dict[str, Any]
|
|
124
126
|
extensions: list[str]
|
|
125
127
|
drop_invalid: bool = False
|
|
128
|
+
mime_type: str = A2UI_MIME_TYPE
|
|
126
129
|
|
|
127
130
|
|
|
128
131
|
_A2UI_DISABLED_CONTEXT = A2UIContext(False, False, {}, [])
|
|
@@ -170,6 +173,11 @@ def _a2ui_context_for_run(
|
|
|
170
173
|
active=a2a_metadata.get("a2ui_active") is True,
|
|
171
174
|
metadata={},
|
|
172
175
|
extensions=[],
|
|
176
|
+
mime_type=(
|
|
177
|
+
a2a_metadata["a2ui_mime_type"]
|
|
178
|
+
if is_a2ui_mime_type(a2a_metadata.get("a2ui_mime_type"))
|
|
179
|
+
else A2UI_MIME_TYPE
|
|
180
|
+
),
|
|
173
181
|
)
|
|
174
182
|
|
|
175
183
|
|
|
@@ -197,26 +205,46 @@ def _a2a_run_metadata(
|
|
|
197
205
|
**({"task_id": task_id} if task_id else {}),
|
|
198
206
|
**({"task_start_id": task_start_id} if task_start_id else {}),
|
|
199
207
|
**({"a2ui_active": context.active} if context.enabled else {}),
|
|
208
|
+
**(
|
|
209
|
+
{"a2ui_mime_type": context.mime_type}
|
|
210
|
+
if context.enabled and context.active
|
|
211
|
+
else {}
|
|
212
|
+
),
|
|
200
213
|
}
|
|
201
214
|
}
|
|
202
215
|
|
|
203
216
|
|
|
204
217
|
def _a2ui_message_context(
|
|
205
|
-
|
|
218
|
+
params: dict[str, Any],
|
|
219
|
+
assistant: dict[str, Any],
|
|
220
|
+
headers: Headers,
|
|
221
|
+
*,
|
|
222
|
+
default_mime_type: str = A2UI_MIME_TYPE,
|
|
206
223
|
) -> A2UIContext:
|
|
224
|
+
message = params.get("message") or {}
|
|
207
225
|
metadata = message.get("metadata") or {}
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
226
|
+
if not isinstance(metadata, dict):
|
|
227
|
+
raise A2UIValidationError("Invalid A2A message metadata")
|
|
228
|
+
extensions: list[str] = []
|
|
229
|
+
for header in (A2A_EXTENSIONS_HEADER, A2UI_EXTENSIONS_HEADER):
|
|
230
|
+
for header_value in headers.getlist(header):
|
|
231
|
+
for value in header_value.split(","):
|
|
232
|
+
if (extension := value.strip()) and extension not in extensions:
|
|
233
|
+
extensions.append(extension)
|
|
234
|
+
mime_type = default_mime_type
|
|
235
|
+
for part in message.get("parts") or []:
|
|
236
|
+
part_metadata = part.get("metadata") if isinstance(part, dict) else None
|
|
237
|
+
if isinstance(part_metadata, dict) and is_a2ui_mime_type(
|
|
238
|
+
part_metadata.get("mimeType")
|
|
239
|
+
):
|
|
240
|
+
mime_type = part_metadata["mimeType"]
|
|
241
|
+
break
|
|
215
242
|
return A2UIContext(
|
|
216
243
|
enabled=_a2ui_enabled(assistant),
|
|
217
244
|
active=A2UI_EXTENSION_URI in extensions,
|
|
218
245
|
metadata=metadata,
|
|
219
246
|
extensions=extensions,
|
|
247
|
+
mime_type=mime_type,
|
|
220
248
|
)
|
|
221
249
|
|
|
222
250
|
|
|
@@ -892,7 +920,9 @@ def _process_a2a_message_parts(
|
|
|
892
920
|
{
|
|
893
921
|
"type": "data",
|
|
894
922
|
"data": part_data,
|
|
895
|
-
"metadata": normalize_metadata(
|
|
923
|
+
"metadata": normalize_metadata(
|
|
924
|
+
part_metadata, mime_type=a2ui.mime_type
|
|
925
|
+
),
|
|
896
926
|
}
|
|
897
927
|
)
|
|
898
928
|
continue
|
|
@@ -1114,7 +1144,7 @@ def _content_to_a2a_parts(
|
|
|
1114
1144
|
{
|
|
1115
1145
|
"kind": "data",
|
|
1116
1146
|
"data": data,
|
|
1117
|
-
"metadata": normalize_metadata(metadata),
|
|
1147
|
+
"metadata": normalize_metadata(metadata, mime_type=a2ui.mime_type),
|
|
1118
1148
|
}
|
|
1119
1149
|
)
|
|
1120
1150
|
elif (
|
|
@@ -2095,6 +2125,7 @@ async def handle_message_send(
|
|
|
2095
2125
|
task_id = None
|
|
2096
2126
|
task_start_id = str(uuid7())
|
|
2097
2127
|
task_ids_by_start_id: dict[str, str] = {}
|
|
2128
|
+
a2ui_mime_type = A2UI_MIME_TYPE
|
|
2098
2129
|
else:
|
|
2099
2130
|
task = await _resolve_task(
|
|
2100
2131
|
client,
|
|
@@ -2121,10 +2152,16 @@ async def handle_message_send(
|
|
|
2121
2152
|
task_id = task.task_id
|
|
2122
2153
|
task_start_id = None
|
|
2123
2154
|
task_ids_by_start_id = task.task_ids_by_start_id
|
|
2155
|
+
a2ui_mime_type = _a2ui_context_for_run(task.run).mime_type
|
|
2124
2156
|
|
|
2125
2157
|
# Process A2A message parts into LangChain messages format
|
|
2126
2158
|
try:
|
|
2127
|
-
a2ui = _a2ui_message_context(
|
|
2159
|
+
a2ui = _a2ui_message_context(
|
|
2160
|
+
params,
|
|
2161
|
+
assistant,
|
|
2162
|
+
request.headers,
|
|
2163
|
+
default_mime_type=a2ui_mime_type,
|
|
2164
|
+
)
|
|
2128
2165
|
message_role = _normalize_input_role(message.get("role", "ROLE_USER"))
|
|
2129
2166
|
input_content = _process_a2a_message_parts(
|
|
2130
2167
|
parts,
|
|
@@ -3352,6 +3389,7 @@ async def handle_message_stream(
|
|
|
3352
3389
|
context_id = context_id_from_message or str(uuid.uuid4())
|
|
3353
3390
|
task_id = None
|
|
3354
3391
|
task_start_id = str(uuid7())
|
|
3392
|
+
a2ui_mime_type = A2UI_MIME_TYPE
|
|
3355
3393
|
else:
|
|
3356
3394
|
task = await _resolve_task(
|
|
3357
3395
|
client,
|
|
@@ -3389,10 +3427,16 @@ async def handle_message_stream(
|
|
|
3389
3427
|
context_id = task.context_id
|
|
3390
3428
|
task_id = task.task_id
|
|
3391
3429
|
task_start_id = None
|
|
3430
|
+
a2ui_mime_type = _a2ui_context_for_run(task.run).mime_type
|
|
3392
3431
|
|
|
3393
3432
|
# Process A2A message parts into LangChain messages format
|
|
3394
3433
|
try:
|
|
3395
|
-
a2ui = _a2ui_message_context(
|
|
3434
|
+
a2ui = _a2ui_message_context(
|
|
3435
|
+
params,
|
|
3436
|
+
assistant,
|
|
3437
|
+
request.headers,
|
|
3438
|
+
default_mime_type=a2ui_mime_type,
|
|
3439
|
+
)
|
|
3396
3440
|
message_role = _normalize_input_role(message.get("role", "ROLE_USER"))
|
|
3397
3441
|
input_content = _process_a2a_message_parts(
|
|
3398
3442
|
parts,
|
|
@@ -9,8 +9,8 @@ import jsonschema_rs
|
|
|
9
9
|
import orjson
|
|
10
10
|
|
|
11
11
|
A2UI_EXTENSION_URI = "https://a2ui.org/a2a-extension/a2ui/v0.9"
|
|
12
|
-
A2UI_MIME_TYPE = "application/a2ui
|
|
13
|
-
_COMPAT_A2UI_MIME_TYPE = "application/json
|
|
12
|
+
A2UI_MIME_TYPE = "application/json+a2ui"
|
|
13
|
+
_COMPAT_A2UI_MIME_TYPE = "application/a2ui+json"
|
|
14
14
|
_SCHEMA_DIR = Path(__file__).with_name("a2ui_schemas")
|
|
15
15
|
|
|
16
16
|
|
|
@@ -52,9 +52,11 @@ def is_a2ui_mime_type(value: Any) -> bool:
|
|
|
52
52
|
return value in {A2UI_MIME_TYPE, _COMPAT_A2UI_MIME_TYPE}
|
|
53
53
|
|
|
54
54
|
|
|
55
|
-
def normalize_metadata(
|
|
55
|
+
def normalize_metadata(
|
|
56
|
+
metadata: dict[str, Any], *, mime_type: str = A2UI_MIME_TYPE
|
|
57
|
+
) -> dict[str, Any]:
|
|
56
58
|
if is_a2ui_mime_type(metadata.get("mimeType")):
|
|
57
|
-
return {**metadata, "mimeType":
|
|
59
|
+
return {**metadata, "mimeType": mime_type}
|
|
58
60
|
return metadata
|
|
59
61
|
|
|
60
62
|
|
|
@@ -70,9 +72,17 @@ def validate_client_metadata(metadata: dict[str, Any]) -> None:
|
|
|
70
72
|
raise A2UIValidationError("Invalid A2UI message metadata") from exc
|
|
71
73
|
|
|
72
74
|
|
|
73
|
-
def validate_payload(
|
|
74
|
-
|
|
75
|
-
|
|
75
|
+
def validate_payload(
|
|
76
|
+
data: Any,
|
|
77
|
+
*,
|
|
78
|
+
direction: Literal["client", "server"],
|
|
79
|
+
) -> None:
|
|
80
|
+
if isinstance(data, list):
|
|
81
|
+
messages = data
|
|
82
|
+
elif isinstance(data, dict):
|
|
83
|
+
messages = (data,)
|
|
84
|
+
else:
|
|
85
|
+
raise A2UIValidationError("A2UI DataPart data must be an array or object")
|
|
76
86
|
|
|
77
87
|
validator = (
|
|
78
88
|
_CLIENT_MESSAGE_VALIDATOR
|
|
@@ -80,7 +90,7 @@ def validate_payload(data: Any, *, direction: Literal["client", "server"]) -> No
|
|
|
80
90
|
else _SERVER_MESSAGE_VALIDATOR
|
|
81
91
|
)
|
|
82
92
|
try:
|
|
83
|
-
for message in
|
|
93
|
+
for message in messages:
|
|
84
94
|
validator.validate(message)
|
|
85
95
|
except ValueError as exc:
|
|
86
96
|
raise A2UIValidationError(f"Invalid A2UI {direction} message") from exc
|
|
@@ -287,7 +287,9 @@ async def handle_tools_list(
|
|
|
287
287
|
schemas = await client.assistants.get_schemas(
|
|
288
288
|
assistant["assistant_id"], headers=request.headers
|
|
289
289
|
)
|
|
290
|
-
input_schema = schemas.get("input_schema"
|
|
290
|
+
input_schema = schemas.get("input_schema", {})
|
|
291
|
+
if input_schema is None:
|
|
292
|
+
raise ValueError("Input schema generation failed")
|
|
291
293
|
if input_schema:
|
|
292
294
|
_sanitizers.simplify_mcp_schema_inplace(input_schema)
|
|
293
295
|
# MCP spec requires inputSchema to be a JSON Schema with type "object"
|