langgraph-api 0.8.4__tar.gz → 0.8.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/Makefile +0 -1
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/PKG-INFO +1 -1
- langgraph_api-0.8.5/langgraph_api/__init__.py +1 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/cli.py +33 -57
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/queue_entrypoint.py +1 -4
- langgraph_api-0.8.5/langgraph_grpc_common/conversion/__init__.py +15 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/conversion/value.py +1 -17
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/__init__.py +0 -8
- langgraph_api-0.8.4/langgraph_api/__init__.py +0 -1
- langgraph_api-0.8.4/langgraph_api/executor_entrypoint.py +0 -31
- langgraph_api-0.8.4/langgraph_grpc_common/conversion/__init__.py +0 -33
- langgraph_api-0.8.4/langgraph_grpc_common/conversion/channel.py +0 -159
- langgraph_api-0.8.4/langgraph_grpc_common/conversion/exception.py +0 -95
- langgraph_api-0.8.4/langgraph_grpc_common/conversion/graph.py +0 -154
- langgraph_api-0.8.4/langgraph_grpc_common/conversion/interrupt.py +0 -34
- langgraph_api-0.8.4/langgraph_grpc_common/conversion/messages.py +0 -405
- langgraph_api-0.8.4/langgraph_grpc_common/conversion/orchestrator_response.py +0 -418
- langgraph_api-0.8.4/langgraph_grpc_common/conversion/runopts.py +0 -95
- langgraph_api-0.8.4/langgraph_grpc_common/conversion/stream_mode.py +0 -55
- langgraph_api-0.8.4/langgraph_grpc_common/conversion/task.py +0 -349
- langgraph_api-0.8.4/langgraph_grpc_common/proto/engine_api_pb2.py +0 -88
- langgraph_api-0.8.4/langgraph_grpc_common/proto/engine_api_pb2.pyi +0 -818
- langgraph_api-0.8.4/langgraph_grpc_common/proto/engine_api_pb2_grpc.py +0 -375
- langgraph_api-0.8.4/langgraph_grpc_common/proto/engine_api_pb2_grpc.pyi +0 -175
- langgraph_api-0.8.4/langgraph_grpc_common/proto/executor_api_pb2.py +0 -114
- langgraph_api-0.8.4/langgraph_grpc_common/proto/executor_api_pb2.pyi +0 -930
- langgraph_api-0.8.4/langgraph_grpc_common/proto/executor_api_pb2_grpc.py +0 -278
- langgraph_api-0.8.4/langgraph_grpc_common/proto/executor_api_pb2_grpc.pyi +0 -107
- langgraph_api-0.8.4/langgraph_grpc_common/sanitize.py +0 -15
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/.gitignore +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/LICENSE +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/README.md +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/.gitignore +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/Makefile +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/README.md +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/assistant.ts +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/benchmark-runner.ts +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/benchmark_profiles.ts +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/benchmarks.ts +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/cancel_first_second_completes.ts +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/enqueued_runs_order.ts +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/log-failure.ts +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/meta_workload.ts +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/stream_write.ts +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/thread.ts +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/thread_runs_metadata_search.ts +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/threads_search_metadata.ts +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/types.ts +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/benchmark-runners/wait_write.ts +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/capacity_dd_report.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/capacity_k6.js +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/capacity_runner.mjs +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/capacity_slack_report.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/capacity_urls.mjs +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/clean-cli.js +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/clean.js +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/continuous/README.md +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/continuous/pyproject.toml +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/continuous/runner.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/continuous/uv.lock +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/graphs.js +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/mixed_workload_k6.js +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/mixed_workload_runner.mjs +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/package.json +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/ramp.js +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/reporting/dd_reporting.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/reporting/slack_slowest_runs.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/reporting/slack_summary.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/run_local.sh +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/staircase.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/staircase_step_k6.js +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/tsconfig.json +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/update-revision.js +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/benchmark/weather.js +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/constraints.txt +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/custom_store.sql +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/forbidden.txt +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/hatch_build.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/healthcheck.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph-cloud-debugging-20260210132856.zip +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/_checkpointer/__init__.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/_checkpointer/_adapter.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/_checkpointer/protocol.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/_factory_utils.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/__init__.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/a2a.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/assistants.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/mcp/__init__.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/mcp/_constants.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/mcp/_handlers.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/mcp/_models.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/mcp/_routes.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/mcp/_sanitizers.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/meta.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/openapi.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/profile.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/runs.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/store.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/threads.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/api/ui.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/asgi_transport.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/asyncio.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/auth/__init__.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/auth/custom.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/auth/errors.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/auth/langsmith/__init__.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/auth/langsmith/backend.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/auth/langsmith/client.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/auth/middleware.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/auth/noop.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/auth/studio_user.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/cache.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/command.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/config/__init__.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/config/_parse.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/config/schemas.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/cron_scheduler.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/encryption/__init__.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/encryption/aes_json.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/encryption/context.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/encryption/custom.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/encryption/middleware.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/encryption/shared.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/errors.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/feature_flags.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/graph.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/__init__.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/client.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/ops/__init__.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/ops/assistants.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/ops/cache.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/ops/crons.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/ops/runs.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/ops/threads.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/server.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/servicers/__init__.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/servicers/checkpointer.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/grpc/servicers/encryption.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/http.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/http_metrics.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/http_metrics_utils.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/.gitignore +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/.prettierrc +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/__init__.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/base.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/build.mts +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/client.http.mts +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/client.mts +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/errors.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/global.d.ts +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/package.json +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/remote.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/schema.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/src/graph.mts +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/src/load.hooks.mjs +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/src/preload.mjs +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/src/utils/files.mts +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/src/utils/importMap.mts +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/src/utils/serde.mts +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/sse.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/traceblock.mts +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/tsconfig.json +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/ui.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/js/yarn.lock +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/lc_security/__init__.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/lc_security/exceptions.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/lc_security/policy.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/lc_security/transport.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/logging.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/metadata.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/metrics_datadog.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/middleware/__init__.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/middleware/ensure_store.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/middleware/http_logger.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/middleware/private_network.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/middleware/request_id.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/models/__init__.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/models/run.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/otel_context.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/patch.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/route.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/schema.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/self_hosted_logs.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/self_hosted_metrics.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/serde.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/server.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/sse.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/state.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/store.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/stream.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/timing/__init__.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/timing/profiler.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/timing/timer.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/traceblock.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/tunneling/cloudflare.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/utils/__init__.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/utils/cache.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/utils/config.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/utils/errors.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/utils/extract.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/utils/future.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/utils/headers.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/utils/network.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/utils/retriable_client.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/utils/stream_codec.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/utils/uuids.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/validation.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/webhook.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_api/worker.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/__init__.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/checkpointer.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/conversion/_compat.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/conversion/checkpoint.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/conversion/config.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/conversion/durability.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/conversion/struct.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/checkpointer_pb2.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/core_api_pb2.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/core_api_pb2.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/encryption_pb2.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/engine_common_pb2.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2_grpc.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/errors_pb2_grpc.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_grpc_common/serde.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_license/__init__.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_license/validation.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_runtime/__init__.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_runtime/checkpoint.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_runtime/database.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_runtime/lifespan.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_runtime/metrics.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_runtime/ops.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_runtime/queue.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_runtime/retry.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_runtime/routes.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/langgraph_runtime/store.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/logging.json +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/openapi.json +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/pyproject.toml +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/scripts/build_wheel.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/scripts/create_license.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/scripts/run_a2a_tck.py +0 -0
- {langgraph_api-0.8.4 → langgraph_api-0.8.5}/uv.lock +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.8.5"
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import argparse
|
|
2
|
-
import asyncio
|
|
3
2
|
import contextlib
|
|
4
3
|
import inspect
|
|
5
4
|
import json
|
|
@@ -194,7 +193,6 @@ def run_server(
|
|
|
194
193
|
__redis_uri__: str | None = "fake",
|
|
195
194
|
__database_uri__: str | None = ":memory:",
|
|
196
195
|
__migrations_path__: str | None = "__inmem",
|
|
197
|
-
__entrypoint__: Literal["server", "python-executor"] = "server",
|
|
198
196
|
**kwargs: typing.Any,
|
|
199
197
|
):
|
|
200
198
|
"""Run the LangGraph API server."""
|
|
@@ -371,53 +369,40 @@ For production use, please use LangSmith Deployment.
|
|
|
371
369
|
if k in inspect.signature(uvicorn.run).parameters
|
|
372
370
|
}
|
|
373
371
|
server_level = server_level.upper()
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
"
|
|
389
|
-
"
|
|
390
|
-
|
|
391
|
-
}
|
|
392
|
-
},
|
|
393
|
-
"handlers": {
|
|
394
|
-
"console": {
|
|
395
|
-
"class": "logging.StreamHandler",
|
|
396
|
-
"formatter": "simple",
|
|
397
|
-
"stream": "ext://sys.stdout",
|
|
398
|
-
}
|
|
399
|
-
},
|
|
400
|
-
"loggers": {
|
|
401
|
-
"uvicorn": {"level": server_level},
|
|
402
|
-
"uvicorn.error": {"level": server_level},
|
|
403
|
-
"langgraph_api.server": {"level": server_level},
|
|
404
|
-
},
|
|
405
|
-
"root": {"handlers": ["console"]},
|
|
372
|
+
uvicorn.run(
|
|
373
|
+
"langgraph_api.server:app",
|
|
374
|
+
host=host,
|
|
375
|
+
port=port,
|
|
376
|
+
reload=reload,
|
|
377
|
+
env_file=env_file,
|
|
378
|
+
access_log=False,
|
|
379
|
+
reload_includes=list(reload_includes) if reload_includes else None,
|
|
380
|
+
reload_excludes=list(reload_excludes) if reload_excludes else None,
|
|
381
|
+
log_config={
|
|
382
|
+
"version": 1,
|
|
383
|
+
"incremental": False,
|
|
384
|
+
"disable_existing_loggers": False,
|
|
385
|
+
"formatters": {
|
|
386
|
+
"simple": {
|
|
387
|
+
"class": "langgraph_api.logging.Formatter",
|
|
388
|
+
}
|
|
406
389
|
},
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
390
|
+
"handlers": {
|
|
391
|
+
"console": {
|
|
392
|
+
"class": "logging.StreamHandler",
|
|
393
|
+
"formatter": "simple",
|
|
394
|
+
"stream": "ext://sys.stdout",
|
|
395
|
+
}
|
|
396
|
+
},
|
|
397
|
+
"loggers": {
|
|
398
|
+
"uvicorn": {"level": server_level},
|
|
399
|
+
"uvicorn.error": {"level": server_level},
|
|
400
|
+
"langgraph_api.server": {"level": server_level},
|
|
401
|
+
},
|
|
402
|
+
"root": {"handlers": ["console"]},
|
|
403
|
+
},
|
|
404
|
+
**supported_kwargs,
|
|
405
|
+
)
|
|
421
406
|
|
|
422
407
|
|
|
423
408
|
def main():
|
|
@@ -464,13 +449,6 @@ def main():
|
|
|
464
449
|
default="inmem",
|
|
465
450
|
help="Runtime edition to use",
|
|
466
451
|
)
|
|
467
|
-
parser.add_argument(
|
|
468
|
-
"--entrypoint",
|
|
469
|
-
type=str,
|
|
470
|
-
default="server",
|
|
471
|
-
choices=["server", "python-executor"],
|
|
472
|
-
help="Entry point to use",
|
|
473
|
-
)
|
|
474
452
|
args = parser.parse_args()
|
|
475
453
|
|
|
476
454
|
with open(args.config, encoding="utf-8") as f:
|
|
@@ -487,8 +465,6 @@ def main():
|
|
|
487
465
|
kwargs["__redis_uri__"] = os.getenv("REDIS_URI")
|
|
488
466
|
kwargs["__database_uri__"] = os.getenv("DATABASE_URI")
|
|
489
467
|
kwargs["__migrations_path__"] = os.getenv("MIGRATIONS_PATH")
|
|
490
|
-
if args.entrypoint == "python-executor":
|
|
491
|
-
kwargs["__entrypoint__"] = "python-executor"
|
|
492
468
|
run_server(
|
|
493
469
|
args.host,
|
|
494
470
|
args.port,
|
|
@@ -199,7 +199,6 @@ async def health_and_metrics_server():
|
|
|
199
199
|
|
|
200
200
|
|
|
201
201
|
async def entrypoint(
|
|
202
|
-
grpc_port: int | None = None,
|
|
203
202
|
entrypoint_name: str = "python-queue",
|
|
204
203
|
cancel_event: asyncio.Event | None = None,
|
|
205
204
|
):
|
|
@@ -215,7 +214,6 @@ async def entrypoint(
|
|
|
215
214
|
functools.partial(
|
|
216
215
|
lifespan.lifespan,
|
|
217
216
|
with_cron_scheduler=False,
|
|
218
|
-
grpc_port=grpc_port,
|
|
219
217
|
taskset=tasks,
|
|
220
218
|
cancel_event=cancel_event,
|
|
221
219
|
),
|
|
@@ -249,7 +247,7 @@ async def entrypoint(
|
|
|
249
247
|
await asyncio.sleep(3600)
|
|
250
248
|
|
|
251
249
|
|
|
252
|
-
async def main(
|
|
250
|
+
async def main(entrypoint_name: str = "python-queue"):
|
|
253
251
|
"""Run the queue entrypoint and shut down gracefully on SIGTERM/SIGINT."""
|
|
254
252
|
|
|
255
253
|
loop = asyncio.get_running_loop()
|
|
@@ -270,7 +268,6 @@ async def main(grpc_port: int | None = None, entrypoint_name: str = "python-queu
|
|
|
270
268
|
# Start the queue entrypoint
|
|
271
269
|
entry_task = asyncio.create_task(
|
|
272
270
|
entrypoint(
|
|
273
|
-
grpc_port=grpc_port,
|
|
274
271
|
entrypoint_name=entrypoint_name,
|
|
275
272
|
cancel_event=cancel_event,
|
|
276
273
|
)
|
|
@@ -5,7 +5,7 @@ from langgraph.types import Command, Send
|
|
|
5
5
|
|
|
6
6
|
from langgraph_grpc_common import serde
|
|
7
7
|
from langgraph_grpc_common.conversion._compat import MISSING, TASKS
|
|
8
|
-
from langgraph_grpc_common.proto import
|
|
8
|
+
from langgraph_grpc_common.proto import engine_common_pb2
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
def serialized_value_from_proto(value: engine_common_pb2.SerializedValue) -> Any:
|
|
@@ -207,19 +207,3 @@ def base_value_to_proto(value: Any) -> engine_common_pb2.ChannelValue:
|
|
|
207
207
|
)
|
|
208
208
|
|
|
209
209
|
return engine_common_pb2.ChannelValue(serialized_value=serialize_value_proto)
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
def input_to_proto(value: Any) -> engine_api_pb2.RunInput | None:
|
|
213
|
-
"""Convert a Python value to a RunInput proto.
|
|
214
|
-
|
|
215
|
-
Returns None if value is None (for resuming execution).
|
|
216
|
-
If the value is a Command, wraps it in RunInput with command field.
|
|
217
|
-
Otherwise, serializes it and wraps in RunInput with input field.
|
|
218
|
-
"""
|
|
219
|
-
if value is None:
|
|
220
|
-
return None
|
|
221
|
-
elif isinstance(value, Command):
|
|
222
|
-
return engine_api_pb2.RunInput(command=command_to_proto(value))
|
|
223
|
-
else:
|
|
224
|
-
serialize_value_proto = any_to_serialized_value(value)
|
|
225
|
-
return engine_api_pb2.RunInput(input=serialize_value_proto)
|
|
@@ -12,10 +12,6 @@ from . import enum_thread_status_pb2
|
|
|
12
12
|
from . import enum_thread_stream_mode_pb2
|
|
13
13
|
from . import core_api_pb2
|
|
14
14
|
from . import core_api_pb2_grpc
|
|
15
|
-
from . import executor_api_pb2
|
|
16
|
-
from . import executor_api_pb2_grpc
|
|
17
|
-
from . import engine_api_pb2
|
|
18
|
-
from . import engine_api_pb2_grpc
|
|
19
15
|
from . import engine_common_pb2
|
|
20
16
|
from . import engine_common_pb2_grpc
|
|
21
17
|
from . import checkpointer_pb2
|
|
@@ -28,10 +24,6 @@ from . import errors_pb2_grpc
|
|
|
28
24
|
__all__ = [
|
|
29
25
|
"core_api_pb2",
|
|
30
26
|
"core_api_pb2_grpc",
|
|
31
|
-
"executor_api_pb2",
|
|
32
|
-
"executor_api_pb2_grpc",
|
|
33
|
-
"engine_api_pb2",
|
|
34
|
-
"engine_api_pb2_grpc",
|
|
35
27
|
"engine_common_pb2",
|
|
36
28
|
"engine_common_pb2_grpc",
|
|
37
29
|
"checkpointer_pb2",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.8.4"
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import argparse
|
|
2
|
-
import asyncio
|
|
3
|
-
import json
|
|
4
|
-
import logging.config
|
|
5
|
-
import pathlib
|
|
6
|
-
|
|
7
|
-
from langgraph_api.queue_entrypoint import main as queue_main
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
async def main(grpc_port: int = 50051):
|
|
11
|
-
with open(pathlib.Path(__file__).parent.parent / "logging.json") as file:
|
|
12
|
-
loaded_config = json.load(file)
|
|
13
|
-
logging.config.dictConfig(loaded_config)
|
|
14
|
-
try:
|
|
15
|
-
import uvloop # noqa: PLC0415
|
|
16
|
-
|
|
17
|
-
uvloop.install()
|
|
18
|
-
except ImportError:
|
|
19
|
-
pass
|
|
20
|
-
from langgraph_api import config # noqa: PLC0415
|
|
21
|
-
|
|
22
|
-
config.IS_EXECUTOR_ENTRYPOINT = True
|
|
23
|
-
await queue_main(grpc_port=grpc_port, entrypoint_name="python-executor")
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
if __name__ == "__main__":
|
|
27
|
-
parser = argparse.ArgumentParser()
|
|
28
|
-
|
|
29
|
-
parser.add_argument("--grpc-port", type=int, default=50051)
|
|
30
|
-
args = parser.parse_args()
|
|
31
|
-
asyncio.run(main(grpc_port=args.grpc_port))
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
from langgraph_grpc_common.conversion import (
|
|
2
|
-
channel,
|
|
3
|
-
checkpoint,
|
|
4
|
-
config,
|
|
5
|
-
durability,
|
|
6
|
-
exception,
|
|
7
|
-
graph,
|
|
8
|
-
interrupt,
|
|
9
|
-
messages,
|
|
10
|
-
orchestrator_response,
|
|
11
|
-
runopts,
|
|
12
|
-
stream_mode,
|
|
13
|
-
struct,
|
|
14
|
-
task,
|
|
15
|
-
value,
|
|
16
|
-
)
|
|
17
|
-
|
|
18
|
-
__all__ = [
|
|
19
|
-
"channel",
|
|
20
|
-
"checkpoint",
|
|
21
|
-
"config",
|
|
22
|
-
"durability",
|
|
23
|
-
"exception",
|
|
24
|
-
"graph",
|
|
25
|
-
"interrupt",
|
|
26
|
-
"messages",
|
|
27
|
-
"orchestrator_response",
|
|
28
|
-
"runopts",
|
|
29
|
-
"stream_mode",
|
|
30
|
-
"struct",
|
|
31
|
-
"task",
|
|
32
|
-
"value",
|
|
33
|
-
]
|
|
@@ -1,159 +0,0 @@
|
|
|
1
|
-
import logging
|
|
2
|
-
from collections.abc import Mapping
|
|
3
|
-
from typing import Any
|
|
4
|
-
|
|
5
|
-
from langgraph.channels.any_value import AnyValue
|
|
6
|
-
from langgraph.channels.base import BaseChannel, EmptyChannelError
|
|
7
|
-
from langgraph.channels.binop import BinaryOperatorAggregate
|
|
8
|
-
from langgraph.channels.ephemeral_value import EphemeralValue
|
|
9
|
-
from langgraph.channels.last_value import LastValue, LastValueAfterFinish
|
|
10
|
-
from langgraph.channels.named_barrier_value import (
|
|
11
|
-
NamedBarrierValue,
|
|
12
|
-
NamedBarrierValueAfterFinish,
|
|
13
|
-
)
|
|
14
|
-
from langgraph.channels.topic import Topic
|
|
15
|
-
from langgraph.channels.untracked_value import UntrackedValue
|
|
16
|
-
from langgraph.managed.base import (
|
|
17
|
-
ManagedValue,
|
|
18
|
-
ManagedValueMapping,
|
|
19
|
-
ManagedValueSpec,
|
|
20
|
-
is_managed_value,
|
|
21
|
-
)
|
|
22
|
-
from langgraph.pregel import Pregel
|
|
23
|
-
|
|
24
|
-
from langgraph_grpc_common.conversion._compat import MISSING
|
|
25
|
-
from langgraph_grpc_common.conversion.exception import UserCodeExecutionErrorException
|
|
26
|
-
from langgraph_grpc_common.conversion.value import value_from_proto, value_to_proto
|
|
27
|
-
from langgraph_grpc_common.proto import engine_common_pb2, executor_api_pb2
|
|
28
|
-
|
|
29
|
-
logger = logging.getLogger(__name__)
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
def channel_to_proto(name: str, channel: BaseChannel) -> engine_common_pb2.Channel:
|
|
33
|
-
try:
|
|
34
|
-
get_result = channel.get()
|
|
35
|
-
except EmptyChannelError:
|
|
36
|
-
get_result = MISSING
|
|
37
|
-
|
|
38
|
-
return engine_common_pb2.Channel(
|
|
39
|
-
get_result=value_to_proto(name, get_result),
|
|
40
|
-
is_available_result=channel.is_available(),
|
|
41
|
-
checkpoint_result=value_to_proto(name, channel.checkpoint()),
|
|
42
|
-
)
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
def channels_to_proto(
|
|
46
|
-
channels: Mapping[str, ManagedValueSpec | BaseChannel | type[ManagedValue]],
|
|
47
|
-
) -> engine_common_pb2.Channels:
|
|
48
|
-
pb = {}
|
|
49
|
-
for name, channel in channels.items():
|
|
50
|
-
if isinstance(channel, BaseChannel):
|
|
51
|
-
pb[name] = channel_to_proto(name, channel)
|
|
52
|
-
else:
|
|
53
|
-
logger.warning(
|
|
54
|
-
"Unrecognized channel value: %s | %s", type(channel), channel
|
|
55
|
-
)
|
|
56
|
-
return engine_common_pb2.Channels(channels=pb)
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
def channels_specs_to_proto(
|
|
60
|
-
channels: Mapping[str, ManagedValueSpec | BaseChannel | type[ManagedValue]],
|
|
61
|
-
) -> dict[str, executor_api_pb2.ChannelSpec]:
|
|
62
|
-
"""Get static channel specs (kind, params) from graph channels. ChannelSpecs is a simple message and by passing it back it lets us avoid deserializing blobs in Go runtime."""
|
|
63
|
-
specs: dict[str, executor_api_pb2.ChannelSpec] = {}
|
|
64
|
-
for name, ch in channels.items():
|
|
65
|
-
kind: executor_api_pb2.ChannelSpec.Kind.ValueType
|
|
66
|
-
params = executor_api_pb2.ChannelParams()
|
|
67
|
-
|
|
68
|
-
if is_managed_value(ch):
|
|
69
|
-
kind = executor_api_pb2.ChannelSpec.MANAGED_VALUE
|
|
70
|
-
elif isinstance(ch, LastValue):
|
|
71
|
-
kind = executor_api_pb2.ChannelSpec.LAST_VALUE
|
|
72
|
-
params.initial_value.CopyFrom(value_to_proto(name, ch.value))
|
|
73
|
-
elif isinstance(ch, AnyValue):
|
|
74
|
-
kind = executor_api_pb2.ChannelSpec.ANY_VALUE
|
|
75
|
-
params.initial_value.CopyFrom(value_to_proto(name, ch.value))
|
|
76
|
-
elif isinstance(ch, EphemeralValue):
|
|
77
|
-
kind = executor_api_pb2.ChannelSpec.EPHEMERAL_VALUE
|
|
78
|
-
params.guard = ch.guard
|
|
79
|
-
params.initial_value.CopyFrom(value_to_proto(name, ch.value))
|
|
80
|
-
elif isinstance(ch, UntrackedValue): # special case
|
|
81
|
-
kind = executor_api_pb2.ChannelSpec.UNTRACKED_VALUE
|
|
82
|
-
params.guard = ch.guard
|
|
83
|
-
params.initial_value.CopyFrom(value_to_proto(name, ch.value))
|
|
84
|
-
elif isinstance(ch, BinaryOperatorAggregate):
|
|
85
|
-
kind = executor_api_pb2.ChannelSpec.BINARY_OPERATOR_AGGREGATE
|
|
86
|
-
params.initial_value.CopyFrom(value_to_proto(name, ch.value))
|
|
87
|
-
elif isinstance(ch, Topic):
|
|
88
|
-
kind = executor_api_pb2.ChannelSpec.TOPIC
|
|
89
|
-
params.accumulate = ch.accumulate
|
|
90
|
-
params.initial_value.CopyFrom(value_to_proto(name, ch.values))
|
|
91
|
-
elif isinstance(ch, NamedBarrierValue):
|
|
92
|
-
kind = executor_api_pb2.ChannelSpec.NAMED_BARRIER_VALUE
|
|
93
|
-
params.names.extend(list(ch.names))
|
|
94
|
-
params.initial_value.CopyFrom(value_to_proto(name, list(ch.seen)))
|
|
95
|
-
elif isinstance(ch, LastValueAfterFinish):
|
|
96
|
-
kind = executor_api_pb2.ChannelSpec.LAST_VALUE_AFTER_FINISH
|
|
97
|
-
params.initial_value.CopyFrom(value_to_proto(name, ch.value))
|
|
98
|
-
elif isinstance(ch, NamedBarrierValueAfterFinish):
|
|
99
|
-
kind = executor_api_pb2.ChannelSpec.NAMED_BARRIER_VALUE_AFTER_FINISH
|
|
100
|
-
params.names.extend(list(ch.names))
|
|
101
|
-
params.initial_value.CopyFrom(
|
|
102
|
-
value_to_proto(name, [list(ch.seen), ch.finished])
|
|
103
|
-
)
|
|
104
|
-
else:
|
|
105
|
-
kind = executor_api_pb2.ChannelSpec.UNKNOWN
|
|
106
|
-
|
|
107
|
-
spec = executor_api_pb2.ChannelSpec(kind=kind, params=params)
|
|
108
|
-
specs[name] = spec
|
|
109
|
-
|
|
110
|
-
return specs
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
def channels_from_proto(
|
|
114
|
-
channels_pb: dict[str, engine_common_pb2.Channel] | Any,
|
|
115
|
-
graph: Pregel,
|
|
116
|
-
*,
|
|
117
|
-
clear_after_read: bool = False,
|
|
118
|
-
) -> tuple[dict[str, BaseChannel], ManagedValueMapping]:
|
|
119
|
-
"""Convert proto channels to Python channel objects.
|
|
120
|
-
|
|
121
|
-
Args:
|
|
122
|
-
channels_pb: Proto channel map from the request.
|
|
123
|
-
graph: The Pregel graph containing channel definitions.
|
|
124
|
-
clear_after_read: If True, clear each channel proto after conversion
|
|
125
|
-
to free memory incrementally. This is useful when channels contain
|
|
126
|
-
large data to avoid holding both serialized and deserialized forms
|
|
127
|
-
in memory simultaneously.
|
|
128
|
-
|
|
129
|
-
Returns:
|
|
130
|
-
Tuple of (channels dict, managed values dict).
|
|
131
|
-
"""
|
|
132
|
-
channels = {}
|
|
133
|
-
managed = {}
|
|
134
|
-
for k, channel_pb in channels_pb.items():
|
|
135
|
-
if k not in graph.channels:
|
|
136
|
-
raise UserCodeExecutionErrorException(
|
|
137
|
-
ValueError(f"Channel '{k}' not found in graph definition"),
|
|
138
|
-
node_name=None,
|
|
139
|
-
)
|
|
140
|
-
v = graph.channels[k]
|
|
141
|
-
if isinstance(v, BaseChannel):
|
|
142
|
-
channels[k] = revive_channel(v, channel_pb)
|
|
143
|
-
elif is_managed_value(v): # managed values
|
|
144
|
-
managed[k] = v
|
|
145
|
-
else:
|
|
146
|
-
raise NotImplementedError(f"Unrecognized channel value: {type(v)} | {v}")
|
|
147
|
-
|
|
148
|
-
if clear_after_read:
|
|
149
|
-
channel_pb.Clear()
|
|
150
|
-
|
|
151
|
-
return channels, managed
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
def revive_channel(
|
|
155
|
-
channel: BaseChannel, channel_pb: engine_common_pb2.Channel
|
|
156
|
-
) -> BaseChannel:
|
|
157
|
-
val_pb = channel_pb.checkpoint_result
|
|
158
|
-
val = MISSING if val_pb.WhichOneof("val") is None else value_from_proto(val_pb)
|
|
159
|
-
return channel.copy().from_checkpoint(val)
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
import traceback
|
|
2
|
-
|
|
3
|
-
from langgraph.errors import GraphInterrupt, GraphRecursionError, ParentCommand
|
|
4
|
-
from langgraph.types import Interrupt
|
|
5
|
-
|
|
6
|
-
from langgraph_grpc_common import serde
|
|
7
|
-
from langgraph_grpc_common.conversion.value import (
|
|
8
|
-
any_to_serialized_value,
|
|
9
|
-
command_to_proto,
|
|
10
|
-
)
|
|
11
|
-
from langgraph_grpc_common.proto import engine_common_pb2, errors_pb2
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
class ExecutorDependencyError(Exception):
|
|
15
|
-
"""Exception wrapper for executor dependency failures (e.g., RemoteCheckpointer gRPC calls).
|
|
16
|
-
|
|
17
|
-
Distinguishes dependency/infrastructure failures from user code execution errors
|
|
18
|
-
and from other executor-internal errors. Tagged as "executor_dependency_internal" in gRPC
|
|
19
|
-
trailing metadata.
|
|
20
|
-
"""
|
|
21
|
-
|
|
22
|
-
def __init__(self, original_exception: Exception, context: str | None = None):
|
|
23
|
-
self.original_exception = original_exception
|
|
24
|
-
self.context = context
|
|
25
|
-
super().__init__(str(original_exception))
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
class UserCodeExecutionErrorException(Exception):
|
|
29
|
-
"""Exception wrapper for user code execution errors that need explicit marking.
|
|
30
|
-
|
|
31
|
-
This exception is used to explicitly mark certain errors as user code errors
|
|
32
|
-
(e.g., context schema validation errors) so they are checked and returned as
|
|
33
|
-
UserCodeExecutionError to the client via grpc, not treated as internal errors.
|
|
34
|
-
|
|
35
|
-
Note that we can't use UserCodeExecutionError which is protobuf message instead of Exception.
|
|
36
|
-
"""
|
|
37
|
-
|
|
38
|
-
def __init__(self, original_exception: Exception, node_name: str | None = None):
|
|
39
|
-
self.original_exception = original_exception
|
|
40
|
-
self.node_name = node_name
|
|
41
|
-
super().__init__(str(original_exception))
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
def exception_to_proto(
|
|
45
|
-
exc: Exception,
|
|
46
|
-
) -> (
|
|
47
|
-
errors_pb2.UserCodeExecutionError
|
|
48
|
-
| engine_common_pb2.WrappedInterrupts
|
|
49
|
-
| engine_common_pb2.ParentCommand
|
|
50
|
-
| errors_pb2.GraphRecursionLimitError
|
|
51
|
-
):
|
|
52
|
-
if isinstance(exc, GraphInterrupt):
|
|
53
|
-
if exc.args[0]:
|
|
54
|
-
# Serialize the list of Interrupts
|
|
55
|
-
encoding, ser = serde.get_serializer().dumps_typed(exc.args[0])
|
|
56
|
-
serialized_interrupts = engine_common_pb2.SerializedValue(
|
|
57
|
-
encoding=encoding, value=ser
|
|
58
|
-
)
|
|
59
|
-
interrupts = interrupts_to_proto(exc.args[0])
|
|
60
|
-
return engine_common_pb2.WrappedInterrupts(
|
|
61
|
-
interrupts=interrupts, serialized_interrupts=serialized_interrupts
|
|
62
|
-
)
|
|
63
|
-
else:
|
|
64
|
-
# Static interrupt (interrupt_before or interrupt_after)
|
|
65
|
-
return engine_common_pb2.WrappedInterrupts(
|
|
66
|
-
interrupts=[engine_common_pb2.Interrupt()]
|
|
67
|
-
)
|
|
68
|
-
elif isinstance(exc, ParentCommand):
|
|
69
|
-
cmd = exc.args[0]
|
|
70
|
-
return engine_common_pb2.ParentCommand(command=command_to_proto(cmd))
|
|
71
|
-
elif isinstance(exc, GraphRecursionError):
|
|
72
|
-
return errors_pb2.GraphRecursionLimitError()
|
|
73
|
-
elif isinstance(exc, ExecutorDependencyError):
|
|
74
|
-
# Internal executor errors (e.g., gRPC failures from RemoteCheckpointer)
|
|
75
|
-
# should be re-raised to be handled as internal errors, not user code errors
|
|
76
|
-
raise
|
|
77
|
-
else:
|
|
78
|
-
# All other exceptions (including InternalUserCodeExecutionError) are user code errors
|
|
79
|
-
return errors_pb2.UserCodeExecutionError(
|
|
80
|
-
error_type=exc.__class__.__name__,
|
|
81
|
-
error_message=str(exc),
|
|
82
|
-
traceback=traceback.format_exc(),
|
|
83
|
-
)
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
def interrupts_to_proto(
|
|
87
|
-
interrupts: tuple[Interrupt],
|
|
88
|
-
) -> list[engine_common_pb2.Interrupt]:
|
|
89
|
-
return [
|
|
90
|
-
engine_common_pb2.Interrupt(
|
|
91
|
-
value=any_to_serialized_value(interrupt.value),
|
|
92
|
-
id=interrupt.id,
|
|
93
|
-
)
|
|
94
|
-
for interrupt in interrupts
|
|
95
|
-
]
|