langgraph-api 0.7.76__tar.gz → 0.7.77__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.7.76 → langgraph_api-0.7.77}/PKG-INFO +1 -1
- langgraph_api-0.7.77/langgraph_api/__init__.py +1 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/runs.py +8 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/config/__init__.py +7 -1
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/graph.py +12 -5
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/client.mts +8 -2
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/src/graph.mts +12 -7
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/middleware/http_logger.py +18 -1
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/route.py +6 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/stream.py +1 -0
- langgraph_api-0.7.76/langgraph_api/__init__.py +0 -1
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/.gitignore +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/LICENSE +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/Makefile +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/README.md +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/.gitignore +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/Makefile +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/README.md +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/benchmark-runners/assistant.js +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/benchmark-runners/benchmark-runner.js +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/benchmark-runners/benchmarks.js +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/benchmark-runners/stream_write.js +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/benchmark-runners/thread.js +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/benchmark-runners/wait_write.js +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/burst.js +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/capacity_dd_report.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/capacity_k6.js +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/capacity_runner.mjs +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/capacity_slack_report.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/capacity_urls.mjs +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/clean-cli.js +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/clean.js +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/continuous/README.md +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/continuous/pyproject.toml +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/continuous/runner.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/continuous/uv.lock +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/graphs.js +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/mixed_workload_k6.js +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/mixed_workload_runner.mjs +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/package.json +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/ramp.js +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/reporting/dd_reporting.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/reporting/slack_slowest_runs.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/reporting/slack_summary.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/run_local.sh +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/staircase.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/staircase_step_k6.js +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/update-revision.js +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/weather.js +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/constraints.txt +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/custom_store.sql +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/forbidden.txt +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/hatch_build.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/healthcheck.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph-cloud-debugging-20260210132856.zip +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/_checkpointer/__init__.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/_checkpointer/_adapter.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/_checkpointer/protocol.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/_factory_utils.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/__init__.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/a2a.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/assistants.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/mcp/__init__.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/mcp/_constants.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/mcp/_handlers.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/mcp/_models.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/mcp/_routes.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/mcp/_sanitizers.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/meta.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/openapi.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/profile.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/store.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/threads.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/api/ui.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/asgi_transport.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/asyncio.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/auth/__init__.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/auth/custom.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/auth/errors.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/auth/langsmith/__init__.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/auth/langsmith/backend.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/auth/langsmith/client.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/auth/middleware.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/auth/noop.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/auth/studio_user.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/cache.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/cli.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/command.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/config/_parse.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/config/schemas.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/cron_scheduler.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/encryption/__init__.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/encryption/aes_json.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/encryption/context.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/encryption/custom.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/encryption/middleware.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/encryption/shared.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/errors.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/executor_entrypoint.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/feature_flags.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/__init__.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/client.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/generated/core_api_pb2.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/ops/__init__.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/ops/assistants.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/ops/cache.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/ops/crons.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/ops/runs.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/ops/threads.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/server.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/servicers/__init__.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/servicers/checkpointer.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/grpc/servicers/encryption.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/http.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/http_metrics.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/http_metrics_utils.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/.gitignore +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/.prettierrc +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/__init__.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/base.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/build.mts +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/client.http.mts +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/errors.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/global.d.ts +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/package.json +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/remote.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/schema.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/src/load.hooks.mjs +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/src/preload.mjs +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/src/utils/files.mts +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/src/utils/importMap.mts +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/src/utils/serde.mts +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/sse.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/traceblock.mts +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/tsconfig.json +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/ui.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/js/yarn.lock +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/logging.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/metadata.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/middleware/__init__.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/middleware/ensure_store.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/middleware/private_network.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/middleware/request_id.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/models/__init__.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/models/run.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/otel_context.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/patch.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/queue_entrypoint.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/schema.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/self_hosted_logs.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/self_hosted_metrics.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/serde.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/server.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/sse.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/state.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/store.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/timing/__init__.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/timing/profiler.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/timing/timer.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/traceblock.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/tunneling/cloudflare.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/utils/__init__.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/utils/cache.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/utils/config.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/utils/errors.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/utils/extract.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/utils/future.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/utils/headers.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/utils/retriable_client.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/utils/stream_codec.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/utils/uuids.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/validation.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/webhook.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_api/worker.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/__init__.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/checkpointer.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/__init__.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/_compat.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/channel.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/checkpoint.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/config.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/durability.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/exception.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/graph.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/interrupt.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/messages.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/orchestrator_response.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/runopts.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/stream_mode.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/struct.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/task.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/conversion/value.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/__init__.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/checkpointer_pb2.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/checkpointer_pb2.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/checkpointer_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/core_api_pb2.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/core_api_pb2.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/core_api_pb2_grpc.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/core_api_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/encryption_pb2.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/encryption_pb2.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/encryption_pb2_grpc.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/encryption_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/engine_api_pb2.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/engine_api_pb2.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/engine_api_pb2_grpc.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/engine_api_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/engine_common_pb2.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/engine_common_pb2.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/engine_common_pb2_grpc.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/engine_common_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_cancel_run_action_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_control_signal_pb2.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_control_signal_pb2.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_control_signal_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_cron_on_run_completed_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_durability_pb2.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_durability_pb2.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_durability_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_multitask_strategy_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_run_status_pb2.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_run_status_pb2.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_run_status_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2_grpc.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_store_operation_entry_type_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_stream_mode_pb2.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_stream_mode_pb2.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_stream_mode_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_thread_status_pb2.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_thread_status_pb2.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_thread_status_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/enum_thread_stream_mode_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/errors_pb2.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/errors_pb2.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/errors_pb2_grpc.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/errors_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/executor_api_pb2.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/executor_api_pb2.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/executor_api_pb2_grpc.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/proto/executor_api_pb2_grpc.pyi +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/sanitize.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_grpc_common/serde.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_license/__init__.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_license/validation.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_runtime/__init__.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_runtime/checkpoint.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_runtime/database.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_runtime/lifespan.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_runtime/metrics.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_runtime/ops.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_runtime/queue.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_runtime/retry.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_runtime/routes.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/langgraph_runtime/store.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/logging.json +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/openapi.json +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/pyproject.toml +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/scripts/build_wheel.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/scripts/create_license.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/scripts/run_a2a_tck.py +0 -0
- {langgraph_api-0.7.76 → langgraph_api-0.7.77}/uv.lock +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.7.77"
|
|
@@ -309,6 +309,8 @@ async def stream_run(
|
|
|
309
309
|
await sub.__aexit__(None, None, None)
|
|
310
310
|
raise
|
|
311
311
|
|
|
312
|
+
request.scope["run_id"] = str(run["run_id"])
|
|
313
|
+
|
|
312
314
|
async def body():
|
|
313
315
|
try:
|
|
314
316
|
async for event, message, stream_id in Runs.Stream.join(
|
|
@@ -358,6 +360,8 @@ async def stream_run_stateless(
|
|
|
358
360
|
await sub.__aexit__(None, None, None)
|
|
359
361
|
raise
|
|
360
362
|
|
|
363
|
+
request.scope["run_id"] = str(run["run_id"])
|
|
364
|
+
|
|
361
365
|
async def body():
|
|
362
366
|
try:
|
|
363
367
|
async for event, message, stream_id in Runs.Stream.join(
|
|
@@ -404,6 +408,8 @@ async def wait_run(request: ApiRequest):
|
|
|
404
408
|
await sub.__aexit__(None, None, None)
|
|
405
409
|
raise
|
|
406
410
|
|
|
411
|
+
request.scope["run_id"] = str(run["run_id"])
|
|
412
|
+
|
|
407
413
|
body = _run_result_body(
|
|
408
414
|
run_id=run["run_id"],
|
|
409
415
|
thread_id=run["thread_id"],
|
|
@@ -448,6 +454,8 @@ async def wait_run_stateless(request: ApiRequest):
|
|
|
448
454
|
await sub.__aexit__(None, None, None)
|
|
449
455
|
raise
|
|
450
456
|
|
|
457
|
+
request.scope["run_id"] = str(run["run_id"])
|
|
458
|
+
|
|
451
459
|
async def stateless_fallback() -> bytes:
|
|
452
460
|
await logger.awarning(
|
|
453
461
|
"No checkpoint emitted for stateless run",
|
|
@@ -142,7 +142,12 @@ See https://developer.chrome.com/blog/private-network-access-update-2024-03
|
|
|
142
142
|
# gRPC client pool size for persistence server.
|
|
143
143
|
GRPC_CLIENT_POOL_SIZE = env("GRPC_CLIENT_POOL_SIZE", cast=int, default=5)
|
|
144
144
|
|
|
145
|
-
#
|
|
145
|
+
# HTTP request body size limit (default matches gRPC limits: 300MB)
|
|
146
|
+
HTTP_MAX_REQUEST_BODY_BYTES = env(
|
|
147
|
+
"HTTP_MAX_REQUEST_BODY_BYTES", cast=int, default=300 * 1024 * 1024
|
|
148
|
+
)
|
|
149
|
+
|
|
150
|
+
# gRPC message size limits (300MB default)
|
|
146
151
|
LSD_GRPC_SERVER_MAX_RECV_MSG_BYTES = env(
|
|
147
152
|
"LSD_GRPC_SERVER_MAX_RECV_MSG_BYTES", cast=int, default=300 * 1024 * 1024
|
|
148
153
|
)
|
|
@@ -502,6 +507,7 @@ __all__ = [
|
|
|
502
507
|
"GRPC_CLIENT_MAX_SEND_MSG_BYTES",
|
|
503
508
|
"GRPC_CLIENT_POOL_SIZE",
|
|
504
509
|
"HTTP_CONFIG",
|
|
510
|
+
"HTTP_MAX_REQUEST_BODY_BYTES",
|
|
505
511
|
"IS_EXECUTOR_ENTRYPOINT",
|
|
506
512
|
"IS_QUEUE_ENTRYPOINT",
|
|
507
513
|
"JSON_THREAD_POOL_MINIMUM_SIZE_BYTES",
|
|
@@ -143,6 +143,7 @@ def _log_slow_graph_generation(
|
|
|
143
143
|
start: float,
|
|
144
144
|
value_type: str,
|
|
145
145
|
graph_id: str,
|
|
146
|
+
run_id: str | None = None,
|
|
146
147
|
warn_threshold_ms: float = 100,
|
|
147
148
|
error_threshold_ms: float = 250,
|
|
148
149
|
) -> None:
|
|
@@ -164,14 +165,19 @@ def _log_slow_graph_generation(
|
|
|
164
165
|
elapsed_ms=elapsed_ms_rounded,
|
|
165
166
|
value_type=value_type,
|
|
166
167
|
graph_id=graph_id,
|
|
168
|
+
run_id=run_id,
|
|
167
169
|
)
|
|
168
170
|
|
|
169
171
|
|
|
170
172
|
@asynccontextmanager
|
|
171
|
-
async def _generate_graph(
|
|
173
|
+
async def _generate_graph(
|
|
174
|
+
value: Any, graph_id: str, run_id: str | None = None
|
|
175
|
+
) -> AsyncIterator[Any]:
|
|
172
176
|
"""Yield a graph object regardless of its type.
|
|
173
177
|
|
|
174
178
|
Logs a warning if graph generation takes >100ms, error if >250ms.
|
|
179
|
+
run_id is passed through solely for inclusion in slow-load log entries,
|
|
180
|
+
enabling correlation with access logs.
|
|
175
181
|
"""
|
|
176
182
|
start = time.perf_counter()
|
|
177
183
|
value_type = type(value).__name__
|
|
@@ -179,15 +185,15 @@ async def _generate_graph(value: Any, graph_id: str) -> AsyncIterator[Any]:
|
|
|
179
185
|
yield value
|
|
180
186
|
elif hasattr(value, "__aenter__") and hasattr(value, "__aexit__"):
|
|
181
187
|
async with value as ctx_value:
|
|
182
|
-
_log_slow_graph_generation(start, value_type, graph_id)
|
|
188
|
+
_log_slow_graph_generation(start, value_type, graph_id, run_id=run_id)
|
|
183
189
|
yield ctx_value
|
|
184
190
|
elif hasattr(value, "__enter__") and hasattr(value, "__exit__"):
|
|
185
191
|
with value as ctx_value:
|
|
186
|
-
_log_slow_graph_generation(start, value_type, graph_id)
|
|
192
|
+
_log_slow_graph_generation(start, value_type, graph_id, run_id=run_id)
|
|
187
193
|
yield ctx_value
|
|
188
194
|
elif asyncio.iscoroutine(value):
|
|
189
195
|
result = await value
|
|
190
|
-
_log_slow_graph_generation(start, value_type, graph_id)
|
|
196
|
+
_log_slow_graph_generation(start, value_type, graph_id, run_id=run_id)
|
|
191
197
|
yield result
|
|
192
198
|
else:
|
|
193
199
|
yield value
|
|
@@ -206,6 +212,7 @@ async def get_graph(
|
|
|
206
212
|
checkpointer: BaseCheckpointSaver | None = None,
|
|
207
213
|
store: BaseStore,
|
|
208
214
|
access_context: AccessContext,
|
|
215
|
+
run_id: str | None = None,
|
|
209
216
|
) -> AsyncIterator[Pregel]:
|
|
210
217
|
"""Return the runnable."""
|
|
211
218
|
from langgraph_api.utils import config as lg_config # noqa: PLC0415
|
|
@@ -239,7 +246,7 @@ async def get_graph(
|
|
|
239
246
|
|
|
240
247
|
value = invoke_factory(value, graph_id, config, server_runtime)
|
|
241
248
|
try:
|
|
242
|
-
async with _generate_graph(value, graph_id) as graph_obj:
|
|
249
|
+
async with _generate_graph(value, graph_id, run_id=run_id) as graph_obj:
|
|
243
250
|
if isinstance(graph_obj, StateGraph):
|
|
244
251
|
graph_obj = graph_obj.compile()
|
|
245
252
|
if not isinstance(graph_obj, Pregel | BaseRemotePregel):
|
|
@@ -148,15 +148,21 @@ const GRAPH_SPEC: Record<string, GraphSpec> = {};
|
|
|
148
148
|
|
|
149
149
|
async function getGraph(
|
|
150
150
|
graphId: string,
|
|
151
|
-
config:
|
|
151
|
+
config: Parameters<CompiledGraphFactory<string>>[0],
|
|
152
152
|
name: string | null | undefined,
|
|
153
153
|
) {
|
|
154
154
|
if (!GRAPH_RESOLVED[graphId])
|
|
155
155
|
throw new HTTPException(404, { message: `Graph "${graphId}" not found` });
|
|
156
156
|
|
|
157
|
+
const factoryConfig = {
|
|
158
|
+
...config,
|
|
159
|
+
checkpointer: GRAPH_OPTIONS.checkpointer,
|
|
160
|
+
store: GRAPH_OPTIONS.store,
|
|
161
|
+
};
|
|
162
|
+
|
|
157
163
|
const resolved =
|
|
158
164
|
typeof GRAPH_RESOLVED[graphId] === "function"
|
|
159
|
-
? await GRAPH_RESOLVED[graphId](
|
|
165
|
+
? await GRAPH_RESOLVED[graphId](factoryConfig)
|
|
160
166
|
: GRAPH_RESOLVED[graphId];
|
|
161
167
|
|
|
162
168
|
if (GRAPH_OPTIONS.checkpointer) {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import * as fs from "node:fs/promises";
|
|
2
2
|
import * as path from "node:path";
|
|
3
3
|
|
|
4
|
-
import type { CompiledGraph, Graph } from "@langchain/langgraph";
|
|
4
|
+
import type { BaseStore, CompiledGraph, Graph } from "@langchain/langgraph";
|
|
5
|
+
import type { BaseCheckpointSaver } from "@langchain/langgraph-checkpoint";
|
|
5
6
|
import type { JSONSchema7 } from "json-schema";
|
|
6
7
|
|
|
7
8
|
export interface GraphSchema {
|
|
@@ -16,9 +17,15 @@ export interface GraphSpec {
|
|
|
16
17
|
exportSymbol: string;
|
|
17
18
|
}
|
|
18
19
|
|
|
19
|
-
export type
|
|
20
|
+
export type FactoryConfig = {
|
|
20
21
|
configurable?: Record<string, unknown>;
|
|
21
|
-
|
|
22
|
+
store?: BaseStore;
|
|
23
|
+
checkpointer?: BaseCheckpointSaver<string | number>;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export type CompiledGraphFactory<T extends string> = (
|
|
27
|
+
config: FactoryConfig,
|
|
28
|
+
) => Promise<CompiledGraph<T>>;
|
|
22
29
|
|
|
23
30
|
export async function resolveGraph(
|
|
24
31
|
spec: string,
|
|
@@ -52,9 +59,7 @@ export async function resolveGraph(
|
|
|
52
59
|
type GraphUnknown =
|
|
53
60
|
| GraphLike
|
|
54
61
|
| Promise<GraphLike>
|
|
55
|
-
| ((config:
|
|
56
|
-
configurable?: Record<string, unknown>;
|
|
57
|
-
}) => GraphLike | Promise<GraphLike>)
|
|
62
|
+
| ((config: FactoryConfig) => GraphLike | Promise<GraphLike>)
|
|
58
63
|
| undefined;
|
|
59
64
|
|
|
60
65
|
const isGraph = (graph: GraphLike): graph is Graph<string> => {
|
|
@@ -97,7 +102,7 @@ export async function resolveGraph(
|
|
|
97
102
|
};
|
|
98
103
|
|
|
99
104
|
if (typeof graph === "function") {
|
|
100
|
-
return async (config:
|
|
105
|
+
return async (config: FactoryConfig) => {
|
|
101
106
|
const graphLike = await graph(config);
|
|
102
107
|
return afterResolve(graphLike);
|
|
103
108
|
};
|
|
@@ -46,7 +46,7 @@ class AccessLoggerMiddleware:
|
|
|
46
46
|
return await self.app(scope, receive, send) # pragma: no cover
|
|
47
47
|
|
|
48
48
|
loop = asyncio.get_event_loop()
|
|
49
|
-
info = {"response": {}}
|
|
49
|
+
info = {"response": {}, "response_bytes": 0, "first_byte_time": None}
|
|
50
50
|
|
|
51
51
|
if self.debug_enabled:
|
|
52
52
|
|
|
@@ -58,6 +58,10 @@ class AccessLoggerMiddleware:
|
|
|
58
58
|
async def inner_send(message: Message) -> None:
|
|
59
59
|
if message["type"] == "http.response.start":
|
|
60
60
|
info["response"] = message
|
|
61
|
+
elif message["type"] == "http.response.body":
|
|
62
|
+
if info["first_byte_time"] is None:
|
|
63
|
+
info["first_byte_time"] = loop.time()
|
|
64
|
+
info["response_bytes"] += len(message.get("body", b""))
|
|
61
65
|
await send(message)
|
|
62
66
|
asgi.debug(f"ASGI send {message['type']}", **message)
|
|
63
67
|
|
|
@@ -67,6 +71,10 @@ class AccessLoggerMiddleware:
|
|
|
67
71
|
async def inner_send(message) -> None:
|
|
68
72
|
if message["type"] == "http.response.start":
|
|
69
73
|
info["response"] = message
|
|
74
|
+
elif message["type"] == "http.response.body":
|
|
75
|
+
if info["first_byte_time"] is None:
|
|
76
|
+
info["first_byte_time"] = loop.time()
|
|
77
|
+
info["response_bytes"] += len(message.get("body", b""))
|
|
70
78
|
await send(message)
|
|
71
79
|
|
|
72
80
|
try:
|
|
@@ -90,6 +98,12 @@ class AccessLoggerMiddleware:
|
|
|
90
98
|
if method and route and status:
|
|
91
99
|
HTTP_METRICS_COLLECTOR.record_request(method, route, status, latency)
|
|
92
100
|
qs = scope.get("query_string")
|
|
101
|
+
first_byte_time = info["first_byte_time"]
|
|
102
|
+
ttfb_ms = (
|
|
103
|
+
round((first_byte_time - info["start_time"]) * 1000, 2)
|
|
104
|
+
if first_byte_time is not None
|
|
105
|
+
else None
|
|
106
|
+
)
|
|
93
107
|
self.logger.log(
|
|
94
108
|
_get_level(status),
|
|
95
109
|
f"{method} {path} {status} {latency}ms",
|
|
@@ -97,6 +111,9 @@ class AccessLoggerMiddleware:
|
|
|
97
111
|
path=path,
|
|
98
112
|
status=status,
|
|
99
113
|
latency_ms=latency,
|
|
114
|
+
ttfb_ms=ttfb_ms,
|
|
115
|
+
run_id=scope.get("run_id"),
|
|
116
|
+
response_size_bytes=info["response_bytes"],
|
|
100
117
|
route=str(route),
|
|
101
118
|
path_params=scope.get("path_params"),
|
|
102
119
|
query_string=qs.decode() if qs else "",
|
|
@@ -80,8 +80,14 @@ class ApiRequest(Request):
|
|
|
80
80
|
async def body(self) -> bytearray:
|
|
81
81
|
if not hasattr(self, "_body"):
|
|
82
82
|
chunks = bytearray()
|
|
83
|
+
limit = config.HTTP_MAX_REQUEST_BODY_BYTES
|
|
83
84
|
async for chunk in self.stream():
|
|
84
85
|
chunks.extend(chunk)
|
|
86
|
+
if len(chunks) > limit:
|
|
87
|
+
raise HTTPException(
|
|
88
|
+
status_code=413,
|
|
89
|
+
detail=f"Request body too large (limit: {limit} bytes)",
|
|
90
|
+
)
|
|
85
91
|
self._body = chunks
|
|
86
92
|
return self._body
|
|
87
93
|
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.7.76"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{langgraph_api-0.7.76 → langgraph_api-0.7.77}/benchmark/benchmark-runners/benchmark-runner.js
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|