langgraph-api 0.4.34__tar.gz → 0.4.35__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.
Potentially problematic release.
This version of langgraph-api might be problematic. Click here for more details.
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/Makefile +52 -7
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/PKG-INFO +1 -1
- langgraph_api-0.4.35/langgraph_api/__init__.py +1 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/api/__init__.py +18 -28
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/graph.py +10 -9
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/grpc_ops/generated/core_api_pb2.py +2 -2
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/grpc_ops/ops.py +4 -3
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/server.py +94 -34
- langgraph_api-0.4.34/langgraph_api/__init__.py +0 -1
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/.gitignore +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/LICENSE +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/README.md +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/benchmark/.gitignore +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/benchmark/Makefile +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/benchmark/README.md +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/benchmark/burst.js +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/benchmark/clean.js +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/benchmark/graphs.js +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/benchmark/package.json +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/benchmark/ramp.js +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/benchmark/update-revision.js +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/benchmark/weather.js +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/constraints.txt +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/forbidden.txt +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/healthcheck.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/api/a2a.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/api/assistants.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/api/mcp.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/api/meta.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/api/openapi.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/api/runs.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/api/store.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/api/threads.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/api/ui.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/asgi_transport.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/asyncio.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/auth/__init__.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/auth/custom.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/auth/langsmith/__init__.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/auth/langsmith/backend.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/auth/langsmith/client.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/auth/middleware.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/auth/noop.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/auth/studio_user.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/cli.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/command.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/config.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/cron_scheduler.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/errors.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/executor_entrypoint.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/feature_flags.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/grpc_ops/__init__.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/grpc_ops/client.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/grpc_ops/generated/__init__.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/grpc_ops/generated/core_api_pb2.pyi +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/grpc_ops/generated/core_api_pb2_grpc.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/http.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/http_metrics.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/http_metrics_utils.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/js/.gitignore +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/js/.prettierrc +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/js/__init__.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/js/base.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/js/build.mts +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/js/client.http.mts +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/js/client.mts +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/js/errors.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/js/global.d.ts +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/js/package.json +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/js/remote.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/js/schema.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/js/src/graph.mts +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/js/src/load.hooks.mjs +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/js/src/preload.mjs +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/js/src/utils/files.mts +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/js/src/utils/importMap.mts +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/js/src/utils/serde.mts +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/js/sse.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/js/traceblock.mts +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/js/tsconfig.json +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/js/ui.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/js/yarn.lock +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/logging.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/metadata.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/middleware/__init__.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/middleware/http_logger.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/middleware/private_network.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/middleware/request_id.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/models/__init__.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/models/run.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/patch.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/queue_entrypoint.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/route.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/schema.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/self_hosted_metrics.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/serde.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/sse.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/state.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/store.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/stream.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/thread_ttl.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/traceblock.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/tunneling/cloudflare.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/utils/__init__.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/utils/cache.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/utils/config.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/utils/errors.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/utils/future.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/utils/headers.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/utils/retriable_client.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/utils/stream_codec.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/utils/uuids.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/validation.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/webhook.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/worker.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_license/__init__.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_license/validation.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_runtime/__init__.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_runtime/checkpoint.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_runtime/database.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_runtime/lifespan.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_runtime/metrics.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_runtime/ops.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_runtime/queue.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_runtime/retry.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_runtime/store.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/logging.json +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/openapi.json +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/pyproject.toml +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/scripts/create_license.py +0 -0
- {langgraph_api-0.4.34 → langgraph_api-0.4.35}/uv.lock +0 -0
|
@@ -2,15 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
# Environment variables
|
|
4
4
|
FF_USE_CORE_API ?= false
|
|
5
|
-
|
|
5
|
+
LANGSERVE_GRAPHS_ALL = '{"agent": "./tests/graphs/agent.py:graph", "custom_lifespan": "./tests/graphs/my_router.py:graph", "single_node": "./tests/graphs/single_node.py:graph", "benchmark": "./tests/graphs/benchmark.py:graph", "config_graph": "./tests/graphs/config_graph.py:graph", "other": "./tests/graphs/other.py:make_graph", "weather": "./tests/graphs/weather.py:mk_weather_graph", "searchy": "./tests/graphs/searchy.py:graph", "agent_simple": "./tests/graphs/agent_simple.py:graph", "simple_runtime": "./tests/graphs/simple_runtime.py:graph", "agent_interrupt": "./tests/graphs/agent_interrupt.py:graph", "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"}'
|
|
6
|
+
LANGSERVE_GRAPHS_AUTH = '{"agent": "./tests/graphs/agent.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"}'
|
|
7
|
+
|
|
6
8
|
# Go server management
|
|
7
9
|
build-go-server:
|
|
8
10
|
@echo "Building Go gRPC server..."
|
|
9
|
-
cd ../core/core-api/
|
|
11
|
+
cd ../core/cmd/core-api/sqlite-test-server && go build -o cmd main.go
|
|
10
12
|
|
|
11
13
|
start-go-server:
|
|
12
14
|
@echo "Starting Go gRPC server on port 50051..."
|
|
13
|
-
cd ../core/core-api/
|
|
15
|
+
cd ../core/cmd/core-api/sqlite-test-server && LANGSERVE_GRAPHS=$(LANGSERVE_GRAPHS_ALL) ./cmd &
|
|
14
16
|
@sleep 2
|
|
15
17
|
|
|
16
18
|
stop-go-server:
|
|
@@ -72,6 +74,12 @@ unit-test:
|
|
|
72
74
|
test-auth:
|
|
73
75
|
LANGGRAPH_RUNTIME_EDITION=inmem LANGGRAPH_AUTH='{"path": "./tests/graphs/fastapi_jwt_auth.py:get_current_active_user"}' REDIS_URI=_FAKE DATABASE_URI=:memory: MIGRATIONS_PATH=__inmem__ uv run pytest -v $(AUTH_TEST)
|
|
74
76
|
|
|
77
|
+
test-auth-fastapi-jwt-before-custom-middleware:
|
|
78
|
+
LANGGRAPH_RUNTIME_EDITION=inmem LANGGRAPH_HTTP='{"app": "./tests/graphs/fastapi_jwt_middleware_ordering.py:app", "middleware_order": "auth_first"}' LANGGRAPH_AUTH='{"path": "./tests/graphs/fastapi_jwt_middleware_ordering.py:auth"}' REDIS_URI=_FAKE DATABASE_URI=:memory: MIGRATIONS_PATH=__inmem__ uv run pytest -v $(AUTH_TEST)
|
|
79
|
+
|
|
80
|
+
test-auth-fastapi-jwt-after-custom-middleware:
|
|
81
|
+
LANGGRAPH_RUNTIME_EDITION=inmem LANGGRAPH_HTTP='{"app": "./tests/graphs/fastapi_jwt_middleware_ordering.py:app", "middleware_order": "middleware_first"}' LANGGRAPH_AUTH='{"path": "./tests/graphs/fastapi_jwt_middleware_ordering.py:auth"}' REDIS_URI=_FAKE DATABASE_URI=:memory: MIGRATIONS_PATH=__inmem__ uv run pytest -v $(AUTH_TEST)
|
|
82
|
+
|
|
75
83
|
test-auth-watch:
|
|
76
84
|
LANGGRAPH_RUNTIME_EDITION=inmem LANGGRAPH_AUTH='{"path": "./tests/graphs/fastapi_jwt_auth.py:get_current_active_user"}' REDIS_URI=_FAKE DATABASE_URI=:memory: MIGRATIONS_PATH=__inmem__ uv run ptw . -- -x -vv --ff --capture=no $(AUTH_TEST)
|
|
77
85
|
|
|
@@ -87,7 +95,7 @@ start:
|
|
|
87
95
|
LANGGRAPH_RUNTIME_EDITION=inmem \
|
|
88
96
|
LANGGRAPH_AES_KEY='$(LANGGRAPH_AES_KEY)' \
|
|
89
97
|
N_JOBS_PER_WORKER=2 \
|
|
90
|
-
LANGSERVE_GRAPHS
|
|
98
|
+
LANGSERVE_GRAPHS=$(LANGSERVE_GRAPHS_ALL) \
|
|
91
99
|
LANGGRAPH_STORE='$(STORE_CONFIG)' \
|
|
92
100
|
LANGGRAPH_CONFIG='{"agent": {"configurable": {"model_name": "openai"}}}' \
|
|
93
101
|
LANGSMITH_LANGGRAPH_API_VARIANT=test \
|
|
@@ -112,7 +120,7 @@ start-auth-jwt:
|
|
|
112
120
|
LANGGRAPH_RUNTIME_EDITION=inmem LANGGRAPH_HTTP='$(HTTP_CONFIG)' \
|
|
113
121
|
LANGGRAPH_AES_KEY='$(LANGGRAPH_AES_KEY)' \
|
|
114
122
|
N_JOBS_PER_WORKER=2 \
|
|
115
|
-
LANGSERVE_GRAPHS
|
|
123
|
+
LANGSERVE_GRAPHS=$(LANGSERVE_GRAPHS_AUTH) \
|
|
116
124
|
LANGGRAPH_STORE='$(STORE_CONFIG)' \
|
|
117
125
|
LANGGRAPH_AUTH='{"path": "tests/graphs/jwt_auth.py:auth"}' \
|
|
118
126
|
LANGSMITH_LANGGRAPH_API_VARIANT=test \
|
|
@@ -130,7 +138,7 @@ start-auth-jwt:
|
|
|
130
138
|
start-auth-fastapi-jwt:
|
|
131
139
|
LANGGRAPH_RUNTIME_EDITION=inmem LANGGRAPH_HTTP='$(HTTP_CONFIG)' \
|
|
132
140
|
N_JOBS_PER_WORKER=2 \
|
|
133
|
-
LANGSERVE_GRAPHS
|
|
141
|
+
LANGSERVE_GRAPHS=$(LANGSERVE_GRAPHS_AUTH) \
|
|
134
142
|
LANGGRAPH_STORE='$(STORE_CONFIG)' \
|
|
135
143
|
LANGGRAPH_AUTH='{"path": "./tests/graphs/fastapi_jwt_auth.py:auth"}' \
|
|
136
144
|
LANGSMITH_LANGGRAPH_API_VARIANT=test \
|
|
@@ -145,6 +153,43 @@ start-auth-fastapi-jwt:
|
|
|
145
153
|
--reload-dir ../runtime_inmem \
|
|
146
154
|
--no-access-log
|
|
147
155
|
|
|
156
|
+
start-auth-fastapi-jwt-before-custom-middleware:
|
|
157
|
+
LANGGRAPH_RUNTIME_EDITION=inmem LANGGRAPH_HTTP='{"app": "./tests/graphs/fastapi_jwt_middleware_ordering.py:app", "middleware_order": "auth_first"}' \
|
|
158
|
+
N_JOBS_PER_WORKER=2 \
|
|
159
|
+
LANGSERVE_GRAPHS=$(LANGSERVE_GRAPHS_AUTH) \
|
|
160
|
+
LANGGRAPH_STORE='$(STORE_CONFIG)' \
|
|
161
|
+
LANGGRAPH_AUTH='{"path": "./tests/graphs/fastapi_jwt_middleware_ordering.py:auth"}' \
|
|
162
|
+
LANGSMITH_LANGGRAPH_API_VARIANT=test \
|
|
163
|
+
REDIS_URI=fake \
|
|
164
|
+
DATABASE_URI=:memory: \
|
|
165
|
+
MIGRATIONS_PATH=__inmem \
|
|
166
|
+
uv run uvicorn \
|
|
167
|
+
"langgraph_api.server:app" \
|
|
168
|
+
--reload \
|
|
169
|
+
--port 9123 \
|
|
170
|
+
--reload-dir langgraph_api \
|
|
171
|
+
--reload-dir ../runtime_inmem \
|
|
172
|
+
--no-access-log
|
|
173
|
+
|
|
174
|
+
start-auth-fastapi-jwt-after-custom-middleware:
|
|
175
|
+
LANGGRAPH_RUNTIME_EDITION=inmem LANGGRAPH_HTTP='{"app": "./tests/graphs/fastapi_jwt_middleware_ordering.py:app", "middleware_order": "middleware_first"}' \
|
|
176
|
+
N_JOBS_PER_WORKER=2 \
|
|
177
|
+
LANGSERVE_GRAPHS=$(LANGSERVE_GRAPHS_AUTH) \
|
|
178
|
+
LANGGRAPH_STORE='$(STORE_CONFIG)' \
|
|
179
|
+
LANGGRAPH_AUTH='{"path": "./tests/graphs/fastapi_jwt_middleware_ordering.py:auth"}' \
|
|
180
|
+
LANGSMITH_LANGGRAPH_API_VARIANT=test \
|
|
181
|
+
REDIS_URI=fake \
|
|
182
|
+
DATABASE_URI=:memory: \
|
|
183
|
+
MIGRATIONS_PATH=__inmem \
|
|
184
|
+
uv run uvicorn \
|
|
185
|
+
"langgraph_api.server:app" \
|
|
186
|
+
--reload \
|
|
187
|
+
--port 9123 \
|
|
188
|
+
--reload-dir langgraph_api \
|
|
189
|
+
--reload-dir ../runtime_inmem \
|
|
190
|
+
--no-access-log
|
|
191
|
+
|
|
192
|
+
|
|
148
193
|
start-js-server:
|
|
149
194
|
@echo "Building and starting Go gRPC server..."
|
|
150
195
|
$(MAKE) build-go-server
|
|
@@ -156,7 +201,7 @@ start-js-server:
|
|
|
156
201
|
cd ../public-api-server-js && npm run build; \
|
|
157
202
|
echo "Starting JS server on port 9123..."; \
|
|
158
203
|
cd ../public-api-server-js && FF_USE_CORE_API=true \
|
|
159
|
-
LANGSERVE_GRAPHS=$(
|
|
204
|
+
LANGSERVE_GRAPHS=$(LANGSERVE_GRAPHS_ALL) \
|
|
160
205
|
PORT=9123 npm start
|
|
161
206
|
|
|
162
207
|
VERSION_KIND ?= patch
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.4.35"
|
|
@@ -8,7 +8,7 @@ import structlog
|
|
|
8
8
|
from starlette.applications import Starlette
|
|
9
9
|
from starlette.requests import Request
|
|
10
10
|
from starlette.responses import HTMLResponse, JSONResponse, Response
|
|
11
|
-
from starlette.routing import BaseRoute,
|
|
11
|
+
from starlette.routing import BaseRoute, Route
|
|
12
12
|
|
|
13
13
|
from langgraph_api.api.a2a import a2a_routes
|
|
14
14
|
from langgraph_api.api.assistants import assistants_routes
|
|
@@ -53,14 +53,17 @@ async def docs(request: Request):
|
|
|
53
53
|
return HTMLResponse(DOCS_HTML.format(mount_prefix=MOUNT_PREFIX or ""))
|
|
54
54
|
|
|
55
55
|
|
|
56
|
-
|
|
57
|
-
Route("/ok", ok, methods=["GET"]),
|
|
58
|
-
Route("/openapi.json", openapi, methods=["GET"]),
|
|
59
|
-
Route("/docs", docs, methods=["GET"]),
|
|
56
|
+
shadowable_meta_routes: list[BaseRoute] = [
|
|
60
57
|
Route("/info", meta_info, methods=["GET"]),
|
|
58
|
+
]
|
|
59
|
+
unshadowable_meta_routes: list[BaseRoute] = [
|
|
60
|
+
Route("/ok", ok, methods=["GET"]),
|
|
61
61
|
Route("/metrics", meta_metrics, methods=["GET"]),
|
|
62
|
+
Route("/docs", docs, methods=["GET"]),
|
|
63
|
+
Route("/openapi.json", openapi, methods=["GET"]),
|
|
62
64
|
]
|
|
63
65
|
|
|
66
|
+
middleware_for_protected_routes = [auth_middleware]
|
|
64
67
|
protected_routes: list[BaseRoute] = []
|
|
65
68
|
|
|
66
69
|
if HTTP_CONFIG:
|
|
@@ -87,9 +90,6 @@ else:
|
|
|
87
90
|
protected_routes.extend(mcp_routes)
|
|
88
91
|
protected_routes.extend(a2a_routes)
|
|
89
92
|
|
|
90
|
-
routes: list[BaseRoute] = []
|
|
91
|
-
user_router = None
|
|
92
|
-
|
|
93
93
|
|
|
94
94
|
def load_custom_app(app_import: str) -> Starlette | None:
|
|
95
95
|
# Expect a string in either "path/to/file.py:my_variable" or "some.module.in:my_variable"
|
|
@@ -130,30 +130,18 @@ def load_custom_app(app_import: str) -> Starlette | None:
|
|
|
130
130
|
return user_router
|
|
131
131
|
|
|
132
132
|
|
|
133
|
+
user_router: Starlette | None = None
|
|
133
134
|
if HTTP_CONFIG:
|
|
134
|
-
if
|
|
135
|
-
|
|
136
|
-
if not HTTP_CONFIG.get("disable_meta"):
|
|
137
|
-
routes.extend(meta_routes)
|
|
138
|
-
else:
|
|
139
|
-
# Otherwise the deployment will never be considered healthy
|
|
140
|
-
routes.append(
|
|
135
|
+
if HTTP_CONFIG.get("disable_meta"):
|
|
136
|
+
shadowable_meta_routes = [
|
|
141
137
|
Route(
|
|
142
138
|
"/ok", functools.partial(ok, disabled=True), methods=["GET"], name="ok"
|
|
143
139
|
)
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
routes.append(
|
|
147
|
-
Mount(
|
|
148
|
-
"/",
|
|
149
|
-
middleware=[auth_middleware],
|
|
150
|
-
routes=protected_routes,
|
|
151
|
-
),
|
|
152
|
-
)
|
|
140
|
+
]
|
|
141
|
+
unshadowable_meta_routes = []
|
|
153
142
|
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
routes.append(Mount("/", middleware=[auth_middleware], routes=protected_routes))
|
|
143
|
+
if router_import := HTTP_CONFIG.get("app"):
|
|
144
|
+
user_router = load_custom_app(router_import)
|
|
157
145
|
|
|
158
146
|
|
|
159
147
|
if "inmem" in MIGRATIONS_PATH:
|
|
@@ -166,4 +154,6 @@ if "inmem" in MIGRATIONS_PATH:
|
|
|
166
154
|
await asyncio.to_thread(conn.clear)
|
|
167
155
|
return JSONResponse({"ok": True})
|
|
168
156
|
|
|
169
|
-
|
|
157
|
+
unshadowable_meta_routes.insert(
|
|
158
|
+
0, Route("/internal/truncate", truncate, methods=["POST"])
|
|
159
|
+
)
|
|
@@ -21,7 +21,7 @@ from langgraph.pregel import Pregel
|
|
|
21
21
|
from langgraph.store.base import BaseStore
|
|
22
22
|
from starlette.exceptions import HTTPException
|
|
23
23
|
|
|
24
|
-
from langgraph_api import config
|
|
24
|
+
from langgraph_api import config as lg_api_config
|
|
25
25
|
from langgraph_api.feature_flags import FF_USE_CORE_API, USE_RUNTIME_CONTEXT_API
|
|
26
26
|
from langgraph_api.js.base import BaseRemotePregel, is_js_path
|
|
27
27
|
from langgraph_api.schema import Config
|
|
@@ -87,7 +87,8 @@ async def register_graph(
|
|
|
87
87
|
description=description,
|
|
88
88
|
)
|
|
89
89
|
|
|
90
|
-
|
|
90
|
+
if not lg_api_config.IS_EXECUTOR_ENTRYPOINT:
|
|
91
|
+
await register_graph_db()
|
|
91
92
|
|
|
92
93
|
|
|
93
94
|
@asynccontextmanager
|
|
@@ -358,7 +359,7 @@ async def collect_graphs_from_env(register: bool = False) -> None:
|
|
|
358
359
|
py_specs = list(filterfalse(is_js_spec, specs))
|
|
359
360
|
|
|
360
361
|
if js_specs:
|
|
361
|
-
if
|
|
362
|
+
if lg_api_config.API_VARIANT == "local_dev":
|
|
362
363
|
raise NotImplementedError(
|
|
363
364
|
"LangGraph.JS graphs are not yet supported in local development mode. "
|
|
364
365
|
"To run your JS graphs, either use the LangGraph Studio application "
|
|
@@ -388,15 +389,15 @@ async def collect_graphs_from_env(register: bool = False) -> None:
|
|
|
388
389
|
)
|
|
389
390
|
|
|
390
391
|
if (
|
|
391
|
-
|
|
392
|
-
and (js_app :=
|
|
392
|
+
lg_api_config.HTTP_CONFIG
|
|
393
|
+
and (js_app := lg_api_config.HTTP_CONFIG.get("app"))
|
|
393
394
|
and is_js_path(js_app.split(":")[0])
|
|
394
395
|
):
|
|
395
396
|
js_bg_tasks.add(
|
|
396
397
|
asyncio.create_task(
|
|
397
398
|
run_js_http_process(
|
|
398
399
|
paths_str,
|
|
399
|
-
|
|
400
|
+
lg_api_config.HTTP_CONFIG or {},
|
|
400
401
|
watch="--reload" in sys.argv[1:],
|
|
401
402
|
),
|
|
402
403
|
)
|
|
@@ -468,7 +469,7 @@ def _graph_from_spec(spec: GraphSpec) -> GraphValue:
|
|
|
468
469
|
modspec.loader.exec_module(module) # type: ignore[possibly-unbound-attribute]
|
|
469
470
|
except ImportError as e:
|
|
470
471
|
e.add_note(f"Could not import python module for graph:\n{spec}")
|
|
471
|
-
if
|
|
472
|
+
if lg_api_config.API_VARIANT == "local_dev":
|
|
472
473
|
e.add_note(
|
|
473
474
|
"This error likely means you haven't installed your project and its dependencies yet. Before running the server, install your project:\n\n"
|
|
474
475
|
"If you are using requirements.txt:\n"
|
|
@@ -528,7 +529,7 @@ def _graph_from_spec(spec: GraphSpec) -> GraphValue:
|
|
|
528
529
|
elif isinstance(graph, Pregel):
|
|
529
530
|
# We don't want to fail real deployments, but this will help folks catch unnecessary custom components
|
|
530
531
|
# before they deploy
|
|
531
|
-
if
|
|
532
|
+
if lg_api_config.API_VARIANT == "local_dev":
|
|
532
533
|
has_checkpointer = isinstance(graph.checkpointer, BaseCheckpointSaver)
|
|
533
534
|
has_store = isinstance(graph.store, BaseStore)
|
|
534
535
|
if has_checkpointer or has_store:
|
|
@@ -644,7 +645,7 @@ def resolve_embeddings(index_config: dict) -> "Embeddings":
|
|
|
644
645
|
|
|
645
646
|
except ImportError as e:
|
|
646
647
|
e.add_note(f"Could not import embeddings module:\n{module_name}\n\n")
|
|
647
|
-
if
|
|
648
|
+
if lg_api_config.API_VARIANT == "local_dev":
|
|
648
649
|
e.add_note(
|
|
649
650
|
"If you're in development mode, make sure you've installed your project "
|
|
650
651
|
"and its dependencies:\n"
|
{langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/grpc_ops/generated/core_api_pb2.py
RENAMED
|
@@ -27,14 +27,14 @@ from google.protobuf import struct_pb2 as google_dot_protobuf_dot_struct__pb2
|
|
|
27
27
|
from google.protobuf import timestamp_pb2 as google_dot_protobuf_dot_timestamp__pb2
|
|
28
28
|
|
|
29
29
|
|
|
30
|
-
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0e\x63ore-api.proto\x12\x07\x63oreApi\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xab\x01\n\x06\x43onfig\x12\x0c\n\x04tags\x18\x01 \x03(\t\x12\x1c\n\x0frecursion_limit\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x32\n\x0c\x63onfigurable\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\x05\x65xtra\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x12\n\x10_recursion_limitB\x0f\n\r_configurableB\x08\n\x06_extra\"\x1d\n\x0c\x45qAuthFilter\x12\r\n\x05match\x18\x01 \x01(\t\"=\n\x12\x43ontainsAuthFilter\x12\'\n\x07matches\x18\x01 \x03(\x0b\x32\x16.google.protobuf.Value\"l\n\nAuthFilter\x12#\n\x02\x65q\x18\x01 \x01(\x0b\x32\x15.coreApi.EqAuthFilterH\x00\x12/\n\x08\x63ontains\x18\x02 \x01(\x0b\x32\x1b.coreApi.ContainsAuthFilterH\x00\x42\x08\n\x06\x66ilter\"\x15\n\x04UUID\x12\r\n\x05value\x18\x01 \x01(\t\"\x1e\n\rCountResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x04\"\x93\x03\n\tAssistant\x12\x14\n\x0c\x61ssistant_id\x18\x01 \x01(\t\x12\x10\n\x08graph_id\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x04\x12.\n\ncreated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12$\n\x06\x63onfig\x18\x06 \x01(\x0b\x32\x0f.coreApi.ConfigH\x00\x88\x01\x01\x12-\n\x07\x63ontext\x18\x07 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12.\n\x08metadata\x18\x08 \x01(\x0b\x32\x17.google.protobuf.StructH\x02\x88\x01\x01\x12\x11\n\x04name\x18\t \x01(\tH\x03\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\n \x01(\tH\x04\x88\x01\x01\x42\t\n\x07_configB\n\n\x08_contextB\x0b\n\t_metadataB\x07\n\x05_nameB\x0e\n\x0c_description\"\xea\x02\n\x10\x41ssistantVersion\x12\x14\n\x0c\x61ssistant_id\x18\x01 \x01(\t\x12\x10\n\x08graph_id\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x04\x12.\n\ncreated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12$\n\x06\x63onfig\x18\x05 \x01(\x0b\x32\x0f.coreApi.ConfigH\x00\x88\x01\x01\x12-\n\x07\x63ontext\x18\x06 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12.\n\x08metadata\x18\x07 \x01(\x0b\x32\x17.google.protobuf.StructH\x02\x88\x01\x01\x12\x11\n\x04name\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\t \x01(\tH\x04\x88\x01\x01\x42\t\n\x07_configB\n\n\x08_contextB\x0b\n\t_metadataB\x07\n\x05_nameB\x0e\n\x0c_description\"\xc2\x03\n\x16\x43reateAssistantRequest\x12\x14\n\x0c\x61ssistant_id\x18\x01 \x01(\t\x12\x10\n\x08graph_id\x18\x02 \x01(\t\x12=\n\x07\x66ilters\x18\x03 \x03(\x0b\x32,.coreApi.CreateAssistantRequest.FiltersEntry\x12.\n\tif_exists\x18\x04 \x01(\x0e\x32\x1b.coreApi.OnConflictBehavior\x12\x1f\n\x06\x63onfig\x18\x05 \x01(\x0b\x32\x0f.coreApi.Config\x12(\n\x07\x63ontext\x18\x06 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x11\n\x04name\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x08 \x01(\tH\x01\x88\x01\x01\x12.\n\x08metadata\x18\t \x01(\x0b\x32\x17.google.protobuf.StructH\x02\x88\x01\x01\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\x42\x07\n\x05_nameB\x0e\n\x0c_descriptionB\x0b\n\t_metadata\"\xac\x01\n\x13GetAssistantRequest\x12\x14\n\x0c\x61ssistant_id\x18\x01 \x01(\t\x12:\n\x07\x66ilters\x18\x02 \x03(\x0b\x32).coreApi.GetAssistantRequest.FiltersEntry\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\"\xc3\x03\n\x15PatchAssistantRequest\x12\x14\n\x0c\x61ssistant_id\x18\x01 \x01(\t\x12<\n\x07\x66ilters\x18\x02 \x03(\x0b\x32+.coreApi.PatchAssistantRequest.FiltersEntry\x12\x15\n\x08graph_id\x18\x03 \x01(\tH\x00\x88\x01\x01\x12$\n\x06\x63onfig\x18\x04 \x01(\x0b\x32\x0f.coreApi.ConfigH\x01\x88\x01\x01\x12-\n\x07\x63ontext\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructH\x02\x88\x01\x01\x12\x11\n\x04name\x18\x06 \x01(\tH\x03\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x04\x88\x01\x01\x12.\n\x08metadata\x18\x08 \x01(\x0b\x32\x17.google.protobuf.StructH\x05\x88\x01\x01\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\x42\x0b\n\t_graph_idB\t\n\x07_configB\n\n\x08_contextB\x07\n\x05_nameB\x0e\n\x0c_descriptionB\x0b\n\t_metadata\"\xb2\x01\n\x16\x44\x65leteAssistantRequest\x12\x14\n\x0c\x61ssistant_id\x18\x01 \x01(\t\x12=\n\x07\x66ilters\x18\x02 \x03(\x0b\x32,.coreApi.DeleteAssistantRequest.FiltersEntry\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\"1\n\x18\x44\x65leteAssistantsResponse\x12\x15\n\rassistant_ids\x18\x01 \x03(\t\"\xc9\x01\n\x19SetLatestAssistantRequest\x12\x14\n\x0c\x61ssistant_id\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\x03\x12@\n\x07\x66ilters\x18\x03 \x03(\x0b\x32/.coreApi.SetLatestAssistantRequest.FiltersEntry\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\"\xc6\x03\n\x17SearchAssistantsRequest\x12>\n\x07\x66ilters\x18\x01 \x03(\x0b\x32-.coreApi.SearchAssistantsRequest.FiltersEntry\x12\x15\n\x08graph_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12.\n\x08metadata\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x13\n\x06offset\x18\x05 \x01(\x04H\x03\x88\x01\x01\x12/\n\x07sort_by\x18\x06 \x01(\x0e\x32\x19.coreApi.AssistantsSortByH\x04\x88\x01\x01\x12+\n\nsort_order\x18\x07 \x01(\x0e\x32\x12.coreApi.SortOrderH\x05\x88\x01\x01\x12\x0e\n\x06select\x18\x08 \x03(\t\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\x42\x0b\n\t_graph_idB\x0b\n\t_metadataB\x08\n\x06_limitB\t\n\x07_offsetB\n\n\x08_sort_byB\r\n\x0b_sort_order\"B\n\x18SearchAssistantsResponse\x12&\n\nassistants\x18\x01 \x03(\x0b\x32\x12.coreApi.Assistant\"\xb7\x02\n\x1bGetAssistantVersionsRequest\x12\x14\n\x0c\x61ssistant_id\x18\x01 \x01(\t\x12\x42\n\x07\x66ilters\x18\x02 \x03(\x0b\x32\x31.coreApi.GetAssistantVersionsRequest.FiltersEntry\x12.\n\x08metadata\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\x04H\x01\x88\x01\x01\x12\x13\n\x06offset\x18\x05 \x01(\x04H\x02\x88\x01\x01\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\x42\x0b\n\t_metadataB\x08\n\x06_limitB\t\n\x07_offset\"K\n\x1cGetAssistantVersionsResponse\x12+\n\x08versions\x18\x01 \x03(\x0b\x32\x19.coreApi.AssistantVersion\"\xfd\x01\n\x16\x43ountAssistantsRequest\x12=\n\x07\x66ilters\x18\x01 \x03(\x0b\x32,.coreApi.CountAssistantsRequest.FiltersEntry\x12\x15\n\x08graph_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12.\n\x08metadata\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\x42\x0b\n\t_graph_idB\x0b\n\t_metadata\"i\n\x0fTruncateRequest\x12\x0c\n\x04runs\x18\x01 \x01(\x08\x12\x0f\n\x07threads\x18\x02 \x01(\x08\x12\x12\n\nassistants\x18\x03 \x01(\x08\x12\x14\n\x0c\x63heckpointer\x18\x04 \x01(\x08\x12\r\n\x05store\x18\x05 \x01(\x08\"\xbb\x01\n\x0fThreadTTLConfig\x12\x31\n\x08strategy\x18\x01 \x01(\x0e\x32\x1a.coreApi.ThreadTTLStrategyH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65\x66\x61ult_ttl\x18\x02 \x01(\x01H\x01\x88\x01\x01\x12#\n\x16sweep_interval_minutes\x18\x03 \x01(\x05H\x02\x88\x01\x01\x42\x0b\n\t_strategyB\x0e\n\x0c_default_ttlB\x19\n\x17_sweep_interval_minutes\"\x19\n\x08\x46ragment\x12\r\n\x05value\x18\x01 \x01(\x0c\"\xac\x01\n\x0e\x43heckpointTask\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x12\n\x05\x65rror\x18\x03 \x01(\tH\x00\x88\x01\x01\x12+\n\ninterrupts\x18\x04 \x03(\x0b\x32\x17.google.protobuf.Struct\x12+\n\x05state\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x42\x08\n\x06_errorB\x08\n\x06_state\"\xd6\x01\n\x12\x43heckpointMetadata\x12.\n\x06source\x18\x01 \x01(\x0e\x32\x19.coreApi.CheckpointSourceH\x00\x88\x01\x01\x12\x11\n\x04step\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x39\n\x07parents\x18\x03 \x03(\x0b\x32(.coreApi.CheckpointMetadata.ParentsEntry\x1a.\n\x0cParentsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\t\n\x07_sourceB\x07\n\x05_step\"\x91\x02\n\x11\x43heckpointPayload\x12$\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x0f.coreApi.ConfigH\x00\x88\x01\x01\x12-\n\x08metadata\x18\x02 \x01(\x0b\x32\x1b.coreApi.CheckpointMetadata\x12\'\n\x06values\x18\x03 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x0c\n\x04next\x18\x04 \x03(\t\x12+\n\rparent_config\x18\x05 \x01(\x0b\x32\x0f.coreApi.ConfigH\x01\x88\x01\x01\x12&\n\x05tasks\x18\x06 \x03(\x0b\x32\x17.coreApi.CheckpointTaskB\t\n\x07_configB\x10\n\x0e_parent_config\"\x99\x01\n\tInterrupt\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x11\n\x04when\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x16\n\tresumable\x18\x04 \x01(\x08H\x02\x88\x01\x01\x12\n\n\x02ns\x18\x05 \x03(\tB\x05\n\x03_idB\x07\n\x05_whenB\x0c\n\n_resumable\"4\n\nInterrupts\x12&\n\ninterrupts\x18\x01 \x03(\x0b\x32\x12.coreApi.Interrupt\"\xbd\x03\n\x06Thread\x12 \n\tthread_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12.\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12#\n\x08metadata\x18\x04 \x01(\x0b\x32\x11.coreApi.Fragment\x12!\n\x06\x63onfig\x18\x05 \x01(\x0b\x32\x11.coreApi.Fragment\x12\"\n\x07\x63ontext\x18\x06 \x01(\x0b\x32\x11.coreApi.Fragment\x12%\n\x06status\x18\x07 \x01(\x0e\x32\x15.coreApi.ThreadStatus\x12!\n\x06values\x18\x08 \x01(\x0b\x32\x11.coreApi.Fragment\x12\x33\n\ninterrupts\x18\t \x03(\x0b\x32\x1f.coreApi.Thread.InterruptsEntry\x1a\x46\n\x0fInterruptsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.Interrupts:\x02\x38\x01\"\xd9\x02\n\x13\x43reateThreadRequest\x12 \n\tthread_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12:\n\x07\x66ilters\x18\x02 \x03(\x0b\x32).coreApi.CreateThreadRequest.FiltersEntry\x12.\n\tif_exists\x18\x03 \x01(\x0e\x32\x1b.coreApi.OnConflictBehavior\x12.\n\x08metadata\x18\x04 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x12*\n\x03ttl\x18\x05 \x01(\x0b\x32\x18.coreApi.ThreadTTLConfigH\x01\x88\x01\x01\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\x42\x0b\n\t_metadataB\x06\n\x04_ttl\"\xb2\x01\n\x10GetThreadRequest\x12 \n\tthread_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12\x37\n\x07\x66ilters\x18\x02 \x03(\x0b\x32&.coreApi.GetThreadRequest.FiltersEntry\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\"\xa7\x02\n\x12PatchThreadRequest\x12 \n\tthread_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12\x39\n\x07\x66ilters\x18\x02 \x03(\x0b\x32(.coreApi.PatchThreadRequest.FiltersEntry\x12.\n\x08metadata\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x12*\n\x03ttl\x18\x04 \x01(\x0b\x32\x18.coreApi.ThreadTTLConfigH\x01\x88\x01\x01\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\x42\x0b\n\t_metadataB\x06\n\x04_ttl\"\xb8\x01\n\x13\x44\x65leteThreadRequest\x12 \n\tthread_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12:\n\x07\x66ilters\x18\x02 \x03(\x0b\x32).coreApi.DeleteThreadRequest.FiltersEntry\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\"\xb4\x01\n\x11\x43opyThreadRequest\x12 \n\tthread_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12\x38\n\x07\x66ilters\x18\x02 \x03(\x0b\x32\'.coreApi.CopyThreadRequest.FiltersEntry\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\"\x89\x04\n\x14SearchThreadsRequest\x12;\n\x07\x66ilters\x18\x01 \x03(\x0b\x32*.coreApi.SearchThreadsRequest.FiltersEntry\x12.\n\x08metadata\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x12,\n\x06values\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12*\n\x06status\x18\x04 \x01(\x0e\x32\x15.coreApi.ThreadStatusH\x02\x88\x01\x01\x12\x12\n\x05limit\x18\x05 \x01(\x04H\x03\x88\x01\x01\x12\x13\n\x06offset\x18\x06 \x01(\x04H\x04\x88\x01\x01\x12,\n\x07sort_by\x18\x07 \x01(\x0e\x32\x16.coreApi.ThreadsSortByH\x05\x88\x01\x01\x12+\n\nsort_order\x18\x08 \x01(\x0e\x32\x12.coreApi.SortOrderH\x06\x88\x01\x01\x12\x0e\n\x06select\x18\t \x03(\t\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\x42\x0b\n\t_metadataB\t\n\x07_valuesB\t\n\x07_statusB\x08\n\x06_limitB\t\n\x07_offsetB\n\n\x08_sort_byB\r\n\x0b_sort_order\"9\n\x15SearchThreadsResponse\x12 \n\x07threads\x18\x01 \x03(\x0b\x32\x0f.coreApi.Thread\"\xc3\x02\n\x13\x43ountThreadsRequest\x12:\n\x07\x66ilters\x18\x01 \x03(\x0b\x32).coreApi.CountThreadsRequest.FiltersEntry\x12.\n\x08metadata\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x12,\n\x06values\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12*\n\x06status\x18\x04 \x01(\x0e\x32\x15.coreApi.ThreadStatusH\x02\x88\x01\x01\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\x42\x0b\n\t_metadataB\t\n\x07_valuesB\t\n\x07_status\";\n\x17SweepThreadsTTLResponse\x12\x0f\n\x07\x65xpired\x18\x01 \x01(\x04\x12\x0f\n\x07\x64\x65leted\x18\x02 \x01(\x04\"J\n\x16SweepThreadsTTLRequest\x12\x12\n\nbatch_size\x18\x01 \x01(\x04\x12\x12\n\x05limit\x18\x02 \x01(\x04H\x00\x88\x01\x01\x42\x08\n\x06_limit\"\x94\x02\n\x16SetThreadStatusRequest\x12 \n\tthread_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12%\n\x06status\x18\x02 \x01(\x0e\x32\x15.coreApi.ThreadStatus\x12\x33\n\ncheckpoint\x18\x03 \x01(\x0b\x32\x1a.coreApi.CheckpointPayloadH\x00\x88\x01\x01\x12/\n\texception\x18\x04 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12.\n\x0f\x65xpected_status\x18\x05 \x03(\x0e\x32\x15.coreApi.ThreadStatusB\r\n\x0b_checkpointB\x0c\n\n_exception\"\xee\x01\n\x1bSetThreadJointStatusRequest\x12 \n\tthread_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12\x1d\n\x06run_id\x18\x02 \x01(\x0b\x32\r.coreApi.UUID\x12\x12\n\nrun_status\x18\x03 \x01(\t\x12\x10\n\x08graph_id\x18\x04 \x01(\t\x12\x33\n\ncheckpoint\x18\x05 \x01(\x0b\x32\x1a.coreApi.CheckpointPayloadH\x00\x88\x01\x01\x12\x16\n\texception\x18\x06 \x01(\tH\x01\x88\x01\x01\x42\r\n\x0b_checkpointB\x0c\n\n_exception\"\xd3\x01\n\x14JointRollbackRequest\x12 \n\tthread_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12\x1d\n\x06run_id\x18\x02 \x01(\x0b\x32\r.coreApi.UUID\x12\x10\n\x08graph_id\x18\x03 \x01(\t\x12\x33\n\ncheckpoint\x18\x04 \x01(\x0b\x32\x1a.coreApi.CheckpointPayloadH\x00\x88\x01\x01\x12\x16\n\texception\x18\x05 \x01(\tH\x01\x88\x01\x01\x42\r\n\x0b_checkpointB\x0c\n\n_exception\"\xcf\x04\n\tRunKwargs\x12$\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x0f.coreApi.ConfigH\x00\x88\x01\x01\x12-\n\x07\x63ontext\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12+\n\x05input\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x02\x88\x01\x01\x12-\n\x07\x63ommand\x18\x04 \x01(\x0b\x32\x17.google.protobuf.StructH\x03\x88\x01\x01\x12(\n\x0bstream_mode\x18\x05 \x01(\x0e\x32\x13.coreApi.StreamMode\x12\x18\n\x10interrupt_before\x18\x06 \x03(\t\x12\x17\n\x0finterrupt_after\x18\x07 \x03(\t\x12\x14\n\x07webhook\x18\x08 \x01(\tH\x04\x88\x01\x01\x12\x15\n\rfeedback_keys\x18\t \x03(\t\x12\x16\n\ttemporary\x18\n \x01(\x08H\x05\x88\x01\x01\x12\x16\n\tsubgraphs\x18\x0b \x01(\x08H\x06\x88\x01\x01\x12\x16\n\tresumable\x18\x0c \x01(\x08H\x07\x88\x01\x01\x12\x1e\n\x11\x63heckpoint_during\x18\r \x01(\x08H\x08\x88\x01\x01\x12\x17\n\ndurability\x18\x0e \x01(\tH\t\x88\x01\x01\x42\t\n\x07_configB\n\n\x08_contextB\x08\n\x06_inputB\n\n\x08_commandB\n\n\x08_webhookB\x0c\n\n_temporaryB\x0c\n\n_subgraphsB\x0c\n\n_resumableB\x14\n\x12_checkpoint_duringB\r\n\x0b_durability\"\xf0\x02\n\x03Run\x12\x1d\n\x06run_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12 \n\tthread_id\x18\x02 \x01(\x0b\x32\r.coreApi.UUID\x12#\n\x0c\x61ssistant_id\x18\x03 \x01(\x0b\x32\r.coreApi.UUID\x12.\n\ncreated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\"\n\x06status\x18\x06 \x01(\x0e\x32\x12.coreApi.RunStatus\x12#\n\x08metadata\x18\x07 \x01(\x0b\x32\x11.coreApi.Fragment\x12\"\n\x06kwargs\x18\x08 \x01(\x0b\x32\x12.coreApi.RunKwargs\x12\x36\n\x12multitask_strategy\x18\t \x01(\x0e\x32\x1a.coreApi.MultitaskStrategy\"\x8a\x01\n\nQueueStats\x12\x11\n\tn_pending\x18\x01 \x01(\x04\x12\x11\n\tn_running\x18\x02 \x01(\x04\x12\x19\n\x0cmax_age_secs\x18\x03 \x01(\x01H\x00\x88\x01\x01\x12\x19\n\x0cmed_age_secs\x18\x04 \x01(\x01H\x01\x88\x01\x01\x42\x0f\n\r_max_age_secsB\x0f\n\r_med_age_secs\"-\n\x0eNextRunRequest\x12\x0c\n\x04wait\x18\x01 \x01(\x08\x12\r\n\x05limit\x18\x02 \x01(\x04\"<\n\x0eRunWithAttempt\x12\x19\n\x03run\x18\x01 \x01(\x0b\x32\x0c.coreApi.Run\x12\x0f\n\x07\x61ttempt\x18\x02 \x01(\x04\"8\n\x0fNextRunResponse\x12%\n\x04runs\x18\x01 \x03(\x0b\x32\x17.coreApi.RunWithAttempt\"\xe9\x05\n\x10\x43reateRunRequest\x12#\n\x0c\x61ssistant_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12\'\n\x06kwargs\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x37\n\x07\x66ilters\x18\x03 \x03(\x0b\x32&.coreApi.CreateRunRequest.FiltersEntry\x12%\n\tthread_id\x18\x04 \x01(\x0b\x32\r.coreApi.UUIDH\x00\x88\x01\x01\x12\x14\n\x07user_id\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\"\n\x06run_id\x18\x06 \x01(\x0b\x32\r.coreApi.UUIDH\x02\x88\x01\x01\x12\'\n\x06status\x18\x07 \x01(\x0e\x32\x12.coreApi.RunStatusH\x03\x88\x01\x01\x12.\n\x08metadata\x18\x08 \x01(\x0b\x32\x17.google.protobuf.StructH\x04\x88\x01\x01\x12\'\n\x1aprevent_insert_if_inflight\x18\t \x01(\x08H\x05\x88\x01\x01\x12;\n\x12multitask_strategy\x18\n \x01(\x0e\x32\x1a.coreApi.MultitaskStrategyH\x06\x88\x01\x01\x12\x36\n\rif_not_exists\x18\x0b \x01(\x0e\x32\x1a.coreApi.CreateRunBehaviorH\x07\x88\x01\x01\x12\x1a\n\rafter_seconds\x18\x0c \x01(\x04H\x08\x88\x01\x01\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\x42\x0c\n\n_thread_idB\n\n\x08_user_idB\t\n\x07_run_idB\t\n\x07_statusB\x0b\n\t_metadataB\x1d\n\x1b_prevent_insert_if_inflightB\x15\n\x13_multitask_strategyB\x10\n\x0e_if_not_existsB\x10\n\x0e_after_seconds\"\xcb\x01\n\rGetRunRequest\x12\x1d\n\x06run_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12 \n\tthread_id\x18\x02 \x01(\x0b\x32\r.coreApi.UUID\x12\x34\n\x07\x66ilters\x18\x03 \x03(\x0b\x32#.coreApi.GetRunRequest.FiltersEntry\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\"\xd1\x01\n\x10\x44\x65leteRunRequest\x12\x1d\n\x06run_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12 \n\tthread_id\x18\x02 \x01(\x0b\x32\r.coreApi.UUID\x12\x37\n\x07\x66ilters\x18\x03 \x03(\x0b\x32&.coreApi.DeleteRunRequest.FiltersEntry\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\"V\n\x12\x43\x61ncelRunIdsTarget\x12 \n\tthread_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12\x1e\n\x07run_ids\x18\x02 \x03(\x0b\x32\r.coreApi.UUID\">\n\x12\x43\x61ncelStatusTarget\x12(\n\x06status\x18\x01 \x01(\x0e\x32\x18.coreApi.CancelRunStatus\"\xb3\x02\n\x10\x43\x61ncelRunRequest\x12\x37\n\x07\x66ilters\x18\x01 \x03(\x0b\x32&.coreApi.CancelRunRequest.FiltersEntry\x12.\n\x07run_ids\x18\x02 \x01(\x0b\x32\x1b.coreApi.CancelRunIdsTargetH\x00\x12-\n\x06status\x18\x03 \x01(\x0b\x32\x1b.coreApi.CancelStatusTargetH\x00\x12-\n\x06\x61\x63tion\x18\x04 \x01(\x0e\x32\x18.coreApi.CancelRunActionH\x01\x88\x01\x01\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\x42\x08\n\x06targetB\t\n\x07_action\"\xb6\x02\n\x11SearchRunsRequest\x12 \n\tthread_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12\x38\n\x07\x66ilters\x18\x02 \x03(\x0b\x32\'.coreApi.SearchRunsRequest.FiltersEntry\x12\x12\n\x05limit\x18\x03 \x01(\x04H\x00\x88\x01\x01\x12\x13\n\x06offset\x18\x04 \x01(\x04H\x01\x88\x01\x01\x12\'\n\x06status\x18\x05 \x01(\x0e\x32\x12.coreApi.RunStatusH\x02\x88\x01\x01\x12\x0e\n\x06select\x18\x06 \x03(\t\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\x42\x08\n\x06_limitB\t\n\x07_offsetB\t\n\x07_status\"0\n\x12SearchRunsResponse\x12\x1a\n\x04runs\x18\x01 \x03(\x0b\x32\x0c.coreApi.Run\"X\n\x13SetRunStatusRequest\x12\x1d\n\x06run_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12\"\n\x06status\x18\x02 \x01(\x0e\x32\x12.coreApi.RunStatus\"3\n\x11SweepRunsResponse\x12\x1e\n\x07run_ids\x18\x01 \x03(\x0b\x32\r.coreApi.UUID*/\n\x12OnConflictBehavior\x12\t\n\x05RAISE\x10\x00\x12\x0e\n\nDO_NOTHING\x10\x01*\x1e\n\tSortOrder\x12\x08\n\x04\x44\x45SC\x10\x00\x12\x07\n\x03\x41SC\x10\x01*m\n\x10\x41ssistantsSortBy\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x10\n\x0c\x41SSISTANT_ID\x10\x01\x12\x0c\n\x08GRAPH_ID\x10\x02\x12\x08\n\x04NAME\x10\x03\x12\x0e\n\nCREATED_AT\x10\x04\x12\x0e\n\nUPDATED_AT\x10\x05*v\n\x0cThreadStatus\x12\x16\n\x12THREAD_STATUS_IDLE\x10\x00\x12\x16\n\x12THREAD_STATUS_BUSY\x10\x01\x12\x1d\n\x19THREAD_STATUS_INTERRUPTED\x10\x02\x12\x17\n\x13THREAD_STATUS_ERROR\x10\x03*3\n\x11ThreadTTLStrategy\x12\x1e\n\x1aTHREAD_TTL_STRATEGY_DELETE\x10\x00*\xa8\x01\n\x10\x43heckpointSource\x12!\n\x1d\x43HECKPOINT_SOURCE_UNSPECIFIED\x10\x00\x12\x1b\n\x17\x43HECKPOINT_SOURCE_INPUT\x10\x01\x12\x1a\n\x16\x43HECKPOINT_SOURCE_LOOP\x10\x02\x12\x1c\n\x18\x43HECKPOINT_SOURCE_UPDATE\x10\x03\x12\x1a\n\x16\x43HECKPOINT_SOURCE_FORK\x10\x04*\xab\x01\n\rThreadsSortBy\x12\x1f\n\x1bTHREADS_SORT_BY_UNSPECIFIED\x10\x00\x12\x1d\n\x19THREADS_SORT_BY_THREAD_ID\x10\x01\x12\x1e\n\x1aTHREADS_SORT_BY_CREATED_AT\x10\x02\x12\x1e\n\x1aTHREADS_SORT_BY_UPDATED_AT\x10\x03\x12\x1a\n\x16THREADS_SORT_BY_STATUS\x10\x04*\x9d\x01\n\tRunStatus\x12\x16\n\x12RUN_STATUS_PENDING\x10\x00\x12\x16\n\x12RUN_STATUS_RUNNING\x10\x01\x12\x14\n\x10RUN_STATUS_ERROR\x10\x02\x12\x16\n\x12RUN_STATUS_SUCCESS\x10\x03\x12\x16\n\x12RUN_STATUS_TIMEOUT\x10\x04\x12\x1a\n\x16RUN_STATUS_INTERRUPTED\x10\x05*\xb9\x01\n\x11MultitaskStrategy\x12\"\n\x1eMULTITASK_STRATEGY_UNSPECIFIED\x10\x00\x12\x1d\n\x19MULTITASK_STRATEGY_REJECT\x10\x01\x12\x1f\n\x1bMULTITASK_STRATEGY_ROLLBACK\x10\x02\x12 \n\x1cMULTITASK_STRATEGY_INTERRUPT\x10\x03\x12\x1e\n\x1aMULTITASK_STRATEGY_ENQUEUE\x10\x04*\xef\x01\n\nStreamMode\x12\x1b\n\x17STREAM_MODE_UNSPECIFIED\x10\x00\x12\x16\n\x12STREAM_MODE_VALUES\x10\x01\x12\x18\n\x14STREAM_MODE_MESSAGES\x10\x02\x12\x17\n\x13STREAM_MODE_UPDATES\x10\x03\x12\x16\n\x12STREAM_MODE_EVENTS\x10\x04\x12\x15\n\x11STREAM_MODE_DEBUG\x10\x05\x12\x15\n\x11STREAM_MODE_TASKS\x10\x06\x12\x1b\n\x17STREAM_MODE_CHECKPOINTS\x10\x07\x12\x16\n\x12STREAM_MODE_CUSTOM\x10\x08*`\n\x11\x43reateRunBehavior\x12#\n\x1fREJECT_RUN_IF_THREAD_NOT_EXISTS\x10\x00\x12&\n\"CREATE_THREAD_IF_THREAD_NOT_EXISTS\x10\x01*R\n\x0f\x43\x61ncelRunAction\x12\x1f\n\x1b\x43\x41NCEL_RUN_ACTION_INTERRUPT\x10\x00\x12\x1e\n\x1a\x43\x41NCEL_RUN_ACTION_ROLLBACK\x10\x01*j\n\x0f\x43\x61ncelRunStatus\x12\x1d\n\x19\x43\x41NCEL_RUN_STATUS_PENDING\x10\x00\x12\x1d\n\x19\x43\x41NCEL_RUN_STATUS_RUNNING\x10\x01\x12\x19\n\x15\x43\x41NCEL_RUN_STATUS_ALL\x10\x02\x32\xc1\x04\n\nAssistants\x12\x37\n\x03Get\x12\x1c.coreApi.GetAssistantRequest\x1a\x12.coreApi.Assistant\x12=\n\x06\x43reate\x12\x1f.coreApi.CreateAssistantRequest\x1a\x12.coreApi.Assistant\x12;\n\x05Patch\x12\x1e.coreApi.PatchAssistantRequest\x1a\x12.coreApi.Assistant\x12L\n\x06\x44\x65lete\x12\x1f.coreApi.DeleteAssistantRequest\x1a!.coreApi.DeleteAssistantsResponse\x12M\n\x06Search\x12 .coreApi.SearchAssistantsRequest\x1a!.coreApi.SearchAssistantsResponse\x12\x43\n\tSetLatest\x12\".coreApi.SetLatestAssistantRequest\x1a\x12.coreApi.Assistant\x12Z\n\x0bGetVersions\x12$.coreApi.GetAssistantVersionsRequest\x1a%.coreApi.GetAssistantVersionsResponse\x12@\n\x05\x43ount\x12\x1f.coreApi.CountAssistantsRequest\x1a\x16.coreApi.CountResponse2E\n\x05\x41\x64min\x12<\n\x08Truncate\x12\x18.coreApi.TruncateRequest\x1a\x16.google.protobuf.Empty2\xcd\x05\n\x07Threads\x12\x37\n\x06\x43reate\x12\x1c.coreApi.CreateThreadRequest\x1a\x0f.coreApi.Thread\x12\x31\n\x03Get\x12\x19.coreApi.GetThreadRequest\x1a\x0f.coreApi.Thread\x12\x35\n\x05Patch\x12\x1b.coreApi.PatchThreadRequest\x1a\x0f.coreApi.Thread\x12\x35\n\x06\x44\x65lete\x12\x1c.coreApi.DeleteThreadRequest\x1a\r.coreApi.UUID\x12G\n\x06Search\x12\x1d.coreApi.SearchThreadsRequest\x1a\x1e.coreApi.SearchThreadsResponse\x12=\n\x05\x43ount\x12\x1c.coreApi.CountThreadsRequest\x1a\x16.coreApi.CountResponse\x12\x33\n\x04\x43opy\x12\x1a.coreApi.CopyThreadRequest\x1a\x0f.coreApi.Thread\x12\x44\n\tSetStatus\x12\x1f.coreApi.SetThreadStatusRequest\x1a\x16.google.protobuf.Empty\x12N\n\x0eSetJointStatus\x12$.coreApi.SetThreadJointStatusRequest\x1a\x16.google.protobuf.Empty\x12\x46\n\rJointRollback\x12\x1d.coreApi.JointRollbackRequest\x1a\x16.google.protobuf.Empty\x12M\n\x08SweepTTL\x12\x1f.coreApi.SweepThreadsTTLRequest\x1a .coreApi.SweepThreadsTTLResponse2\x8b\x04\n\x04Runs\x12\x31\n\x06\x43reate\x12\x19.coreApi.CreateRunRequest\x1a\x0c.coreApi.Run\x12+\n\x03Get\x12\x16.coreApi.GetRunRequest\x1a\x0c.coreApi.Run\x12\x32\n\x06\x44\x65lete\x12\x19.coreApi.DeleteRunRequest\x1a\r.coreApi.UUID\x12\x41\n\x06Search\x12\x1a.coreApi.SearchRunsRequest\x1a\x1b.coreApi.SearchRunsResponse\x12;\n\x06\x43\x61ncel\x12\x19.coreApi.CancelRunRequest\x1a\x16.google.protobuf.Empty\x12\x41\n\tSetStatus\x12\x1c.coreApi.SetRunStatusRequest\x1a\x16.google.protobuf.Empty\x12\x34\n\x05Stats\x12\x16.google.protobuf.Empty\x1a\x13.coreApi.QueueStats\x12\x39\n\x04Next\x12\x17.coreApi.NextRunRequest\x1a\x18.coreApi.NextRunResponse\x12;\n\x05Sweep\x12\x16.google.protobuf.Empty\x1a\x1a.coreApi.SweepRunsResponseB<Z:github.com/langchain-ai/langgraph-api/core-api/internal/pbb\x06proto3')
|
|
30
|
+
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0e\x63ore-api.proto\x12\x07\x63oreApi\x1a\x1bgoogle/protobuf/empty.proto\x1a\x1cgoogle/protobuf/struct.proto\x1a\x1fgoogle/protobuf/timestamp.proto\"\xab\x01\n\x06\x43onfig\x12\x0c\n\x04tags\x18\x01 \x03(\t\x12\x1c\n\x0frecursion_limit\x18\x02 \x01(\x04H\x00\x88\x01\x01\x12\x32\n\x0c\x63onfigurable\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\x05\x65xtra\x18\x04 \x01(\x0cH\x02\x88\x01\x01\x42\x12\n\x10_recursion_limitB\x0f\n\r_configurableB\x08\n\x06_extra\"\x1d\n\x0c\x45qAuthFilter\x12\r\n\x05match\x18\x01 \x01(\t\"=\n\x12\x43ontainsAuthFilter\x12\'\n\x07matches\x18\x01 \x03(\x0b\x32\x16.google.protobuf.Value\"l\n\nAuthFilter\x12#\n\x02\x65q\x18\x01 \x01(\x0b\x32\x15.coreApi.EqAuthFilterH\x00\x12/\n\x08\x63ontains\x18\x02 \x01(\x0b\x32\x1b.coreApi.ContainsAuthFilterH\x00\x42\x08\n\x06\x66ilter\"\x15\n\x04UUID\x12\r\n\x05value\x18\x01 \x01(\t\"\x1e\n\rCountResponse\x12\r\n\x05\x63ount\x18\x01 \x01(\x04\"\x93\x03\n\tAssistant\x12\x14\n\x0c\x61ssistant_id\x18\x01 \x01(\t\x12\x10\n\x08graph_id\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x04\x12.\n\ncreated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12$\n\x06\x63onfig\x18\x06 \x01(\x0b\x32\x0f.coreApi.ConfigH\x00\x88\x01\x01\x12-\n\x07\x63ontext\x18\x07 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12.\n\x08metadata\x18\x08 \x01(\x0b\x32\x17.google.protobuf.StructH\x02\x88\x01\x01\x12\x11\n\x04name\x18\t \x01(\tH\x03\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\n \x01(\tH\x04\x88\x01\x01\x42\t\n\x07_configB\n\n\x08_contextB\x0b\n\t_metadataB\x07\n\x05_nameB\x0e\n\x0c_description\"\xea\x02\n\x10\x41ssistantVersion\x12\x14\n\x0c\x61ssistant_id\x18\x01 \x01(\t\x12\x10\n\x08graph_id\x18\x02 \x01(\t\x12\x0f\n\x07version\x18\x03 \x01(\x04\x12.\n\ncreated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12$\n\x06\x63onfig\x18\x05 \x01(\x0b\x32\x0f.coreApi.ConfigH\x00\x88\x01\x01\x12-\n\x07\x63ontext\x18\x06 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12.\n\x08metadata\x18\x07 \x01(\x0b\x32\x17.google.protobuf.StructH\x02\x88\x01\x01\x12\x11\n\x04name\x18\x08 \x01(\tH\x03\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\t \x01(\tH\x04\x88\x01\x01\x42\t\n\x07_configB\n\n\x08_contextB\x0b\n\t_metadataB\x07\n\x05_nameB\x0e\n\x0c_description\"\xc2\x03\n\x16\x43reateAssistantRequest\x12\x14\n\x0c\x61ssistant_id\x18\x01 \x01(\t\x12\x10\n\x08graph_id\x18\x02 \x01(\t\x12=\n\x07\x66ilters\x18\x03 \x03(\x0b\x32,.coreApi.CreateAssistantRequest.FiltersEntry\x12.\n\tif_exists\x18\x04 \x01(\x0e\x32\x1b.coreApi.OnConflictBehavior\x12\x1f\n\x06\x63onfig\x18\x05 \x01(\x0b\x32\x0f.coreApi.Config\x12(\n\x07\x63ontext\x18\x06 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x11\n\x04name\x18\x07 \x01(\tH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x08 \x01(\tH\x01\x88\x01\x01\x12.\n\x08metadata\x18\t \x01(\x0b\x32\x17.google.protobuf.StructH\x02\x88\x01\x01\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\x42\x07\n\x05_nameB\x0e\n\x0c_descriptionB\x0b\n\t_metadata\"\xac\x01\n\x13GetAssistantRequest\x12\x14\n\x0c\x61ssistant_id\x18\x01 \x01(\t\x12:\n\x07\x66ilters\x18\x02 \x03(\x0b\x32).coreApi.GetAssistantRequest.FiltersEntry\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\"\xc3\x03\n\x15PatchAssistantRequest\x12\x14\n\x0c\x61ssistant_id\x18\x01 \x01(\t\x12<\n\x07\x66ilters\x18\x02 \x03(\x0b\x32+.coreApi.PatchAssistantRequest.FiltersEntry\x12\x15\n\x08graph_id\x18\x03 \x01(\tH\x00\x88\x01\x01\x12$\n\x06\x63onfig\x18\x04 \x01(\x0b\x32\x0f.coreApi.ConfigH\x01\x88\x01\x01\x12-\n\x07\x63ontext\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructH\x02\x88\x01\x01\x12\x11\n\x04name\x18\x06 \x01(\tH\x03\x88\x01\x01\x12\x18\n\x0b\x64\x65scription\x18\x07 \x01(\tH\x04\x88\x01\x01\x12.\n\x08metadata\x18\x08 \x01(\x0b\x32\x17.google.protobuf.StructH\x05\x88\x01\x01\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\x42\x0b\n\t_graph_idB\t\n\x07_configB\n\n\x08_contextB\x07\n\x05_nameB\x0e\n\x0c_descriptionB\x0b\n\t_metadata\"\xb2\x01\n\x16\x44\x65leteAssistantRequest\x12\x14\n\x0c\x61ssistant_id\x18\x01 \x01(\t\x12=\n\x07\x66ilters\x18\x02 \x03(\x0b\x32,.coreApi.DeleteAssistantRequest.FiltersEntry\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\"1\n\x18\x44\x65leteAssistantsResponse\x12\x15\n\rassistant_ids\x18\x01 \x03(\t\"\xc9\x01\n\x19SetLatestAssistantRequest\x12\x14\n\x0c\x61ssistant_id\x18\x01 \x01(\t\x12\x0f\n\x07version\x18\x02 \x01(\x03\x12@\n\x07\x66ilters\x18\x03 \x03(\x0b\x32/.coreApi.SetLatestAssistantRequest.FiltersEntry\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\"\xc6\x03\n\x17SearchAssistantsRequest\x12>\n\x07\x66ilters\x18\x01 \x03(\x0b\x32-.coreApi.SearchAssistantsRequest.FiltersEntry\x12\x15\n\x08graph_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12.\n\x08metadata\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\x04H\x02\x88\x01\x01\x12\x13\n\x06offset\x18\x05 \x01(\x04H\x03\x88\x01\x01\x12/\n\x07sort_by\x18\x06 \x01(\x0e\x32\x19.coreApi.AssistantsSortByH\x04\x88\x01\x01\x12+\n\nsort_order\x18\x07 \x01(\x0e\x32\x12.coreApi.SortOrderH\x05\x88\x01\x01\x12\x0e\n\x06select\x18\x08 \x03(\t\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\x42\x0b\n\t_graph_idB\x0b\n\t_metadataB\x08\n\x06_limitB\t\n\x07_offsetB\n\n\x08_sort_byB\r\n\x0b_sort_order\"B\n\x18SearchAssistantsResponse\x12&\n\nassistants\x18\x01 \x03(\x0b\x32\x12.coreApi.Assistant\"\xb7\x02\n\x1bGetAssistantVersionsRequest\x12\x14\n\x0c\x61ssistant_id\x18\x01 \x01(\t\x12\x42\n\x07\x66ilters\x18\x02 \x03(\x0b\x32\x31.coreApi.GetAssistantVersionsRequest.FiltersEntry\x12.\n\x08metadata\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x12\x12\n\x05limit\x18\x04 \x01(\x04H\x01\x88\x01\x01\x12\x13\n\x06offset\x18\x05 \x01(\x04H\x02\x88\x01\x01\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\x42\x0b\n\t_metadataB\x08\n\x06_limitB\t\n\x07_offset\"K\n\x1cGetAssistantVersionsResponse\x12+\n\x08versions\x18\x01 \x03(\x0b\x32\x19.coreApi.AssistantVersion\"\xfd\x01\n\x16\x43ountAssistantsRequest\x12=\n\x07\x66ilters\x18\x01 \x03(\x0b\x32,.coreApi.CountAssistantsRequest.FiltersEntry\x12\x15\n\x08graph_id\x18\x02 \x01(\tH\x00\x88\x01\x01\x12.\n\x08metadata\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\x42\x0b\n\t_graph_idB\x0b\n\t_metadata\"i\n\x0fTruncateRequest\x12\x0c\n\x04runs\x18\x01 \x01(\x08\x12\x0f\n\x07threads\x18\x02 \x01(\x08\x12\x12\n\nassistants\x18\x03 \x01(\x08\x12\x14\n\x0c\x63heckpointer\x18\x04 \x01(\x08\x12\r\n\x05store\x18\x05 \x01(\x08\"\xbb\x01\n\x0fThreadTTLConfig\x12\x31\n\x08strategy\x18\x01 \x01(\x0e\x32\x1a.coreApi.ThreadTTLStrategyH\x00\x88\x01\x01\x12\x18\n\x0b\x64\x65\x66\x61ult_ttl\x18\x02 \x01(\x01H\x01\x88\x01\x01\x12#\n\x16sweep_interval_minutes\x18\x03 \x01(\x05H\x02\x88\x01\x01\x42\x0b\n\t_strategyB\x0e\n\x0c_default_ttlB\x19\n\x17_sweep_interval_minutes\"\x19\n\x08\x46ragment\x12\r\n\x05value\x18\x01 \x01(\x0c\"\xac\x01\n\x0e\x43heckpointTask\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x12\n\x05\x65rror\x18\x03 \x01(\tH\x00\x88\x01\x01\x12+\n\ninterrupts\x18\x04 \x03(\x0b\x32\x17.google.protobuf.Struct\x12+\n\x05state\x18\x05 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x42\x08\n\x06_errorB\x08\n\x06_state\"\xd6\x01\n\x12\x43heckpointMetadata\x12.\n\x06source\x18\x01 \x01(\x0e\x32\x19.coreApi.CheckpointSourceH\x00\x88\x01\x01\x12\x11\n\x04step\x18\x02 \x01(\x04H\x01\x88\x01\x01\x12\x39\n\x07parents\x18\x03 \x03(\x0b\x32(.coreApi.CheckpointMetadata.ParentsEntry\x1a.\n\x0cParentsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t:\x02\x38\x01\x42\t\n\x07_sourceB\x07\n\x05_step\"\x91\x02\n\x11\x43heckpointPayload\x12$\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x0f.coreApi.ConfigH\x00\x88\x01\x01\x12-\n\x08metadata\x18\x02 \x01(\x0b\x32\x1b.coreApi.CheckpointMetadata\x12\'\n\x06values\x18\x03 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x0c\n\x04next\x18\x04 \x03(\t\x12+\n\rparent_config\x18\x05 \x01(\x0b\x32\x0f.coreApi.ConfigH\x01\x88\x01\x01\x12&\n\x05tasks\x18\x06 \x03(\x0b\x32\x17.coreApi.CheckpointTaskB\t\n\x07_configB\x10\n\x0e_parent_config\"\x99\x01\n\tInterrupt\x12\x0f\n\x02id\x18\x01 \x01(\tH\x00\x88\x01\x01\x12&\n\x05value\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x11\n\x04when\x18\x03 \x01(\tH\x01\x88\x01\x01\x12\x16\n\tresumable\x18\x04 \x01(\x08H\x02\x88\x01\x01\x12\n\n\x02ns\x18\x05 \x03(\tB\x05\n\x03_idB\x07\n\x05_whenB\x0c\n\n_resumable\"4\n\nInterrupts\x12&\n\ninterrupts\x18\x01 \x03(\x0b\x32\x12.coreApi.Interrupt\"\xbd\x03\n\x06Thread\x12 \n\tthread_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12.\n\ncreated_at\x18\x02 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x03 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12#\n\x08metadata\x18\x04 \x01(\x0b\x32\x11.coreApi.Fragment\x12!\n\x06\x63onfig\x18\x05 \x01(\x0b\x32\x11.coreApi.Fragment\x12\"\n\x07\x63ontext\x18\x06 \x01(\x0b\x32\x11.coreApi.Fragment\x12%\n\x06status\x18\x07 \x01(\x0e\x32\x15.coreApi.ThreadStatus\x12!\n\x06values\x18\x08 \x01(\x0b\x32\x11.coreApi.Fragment\x12\x33\n\ninterrupts\x18\t \x03(\x0b\x32\x1f.coreApi.Thread.InterruptsEntry\x1a\x46\n\x0fInterruptsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.Interrupts:\x02\x38\x01\"\xd9\x02\n\x13\x43reateThreadRequest\x12 \n\tthread_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12:\n\x07\x66ilters\x18\x02 \x03(\x0b\x32).coreApi.CreateThreadRequest.FiltersEntry\x12.\n\tif_exists\x18\x03 \x01(\x0e\x32\x1b.coreApi.OnConflictBehavior\x12.\n\x08metadata\x18\x04 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x12*\n\x03ttl\x18\x05 \x01(\x0b\x32\x18.coreApi.ThreadTTLConfigH\x01\x88\x01\x01\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\x42\x0b\n\t_metadataB\x06\n\x04_ttl\"\xb2\x01\n\x10GetThreadRequest\x12 \n\tthread_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12\x37\n\x07\x66ilters\x18\x02 \x03(\x0b\x32&.coreApi.GetThreadRequest.FiltersEntry\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\"\xa7\x02\n\x12PatchThreadRequest\x12 \n\tthread_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12\x39\n\x07\x66ilters\x18\x02 \x03(\x0b\x32(.coreApi.PatchThreadRequest.FiltersEntry\x12.\n\x08metadata\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x12*\n\x03ttl\x18\x04 \x01(\x0b\x32\x18.coreApi.ThreadTTLConfigH\x01\x88\x01\x01\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\x42\x0b\n\t_metadataB\x06\n\x04_ttl\"\xb8\x01\n\x13\x44\x65leteThreadRequest\x12 \n\tthread_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12:\n\x07\x66ilters\x18\x02 \x03(\x0b\x32).coreApi.DeleteThreadRequest.FiltersEntry\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\"\xb4\x01\n\x11\x43opyThreadRequest\x12 \n\tthread_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12\x38\n\x07\x66ilters\x18\x02 \x03(\x0b\x32\'.coreApi.CopyThreadRequest.FiltersEntry\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\"\x89\x04\n\x14SearchThreadsRequest\x12;\n\x07\x66ilters\x18\x01 \x03(\x0b\x32*.coreApi.SearchThreadsRequest.FiltersEntry\x12.\n\x08metadata\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x12,\n\x06values\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12*\n\x06status\x18\x04 \x01(\x0e\x32\x15.coreApi.ThreadStatusH\x02\x88\x01\x01\x12\x12\n\x05limit\x18\x05 \x01(\x04H\x03\x88\x01\x01\x12\x13\n\x06offset\x18\x06 \x01(\x04H\x04\x88\x01\x01\x12,\n\x07sort_by\x18\x07 \x01(\x0e\x32\x16.coreApi.ThreadsSortByH\x05\x88\x01\x01\x12+\n\nsort_order\x18\x08 \x01(\x0e\x32\x12.coreApi.SortOrderH\x06\x88\x01\x01\x12\x0e\n\x06select\x18\t \x03(\t\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\x42\x0b\n\t_metadataB\t\n\x07_valuesB\t\n\x07_statusB\x08\n\x06_limitB\t\n\x07_offsetB\n\n\x08_sort_byB\r\n\x0b_sort_order\"9\n\x15SearchThreadsResponse\x12 \n\x07threads\x18\x01 \x03(\x0b\x32\x0f.coreApi.Thread\"\xc3\x02\n\x13\x43ountThreadsRequest\x12:\n\x07\x66ilters\x18\x01 \x03(\x0b\x32).coreApi.CountThreadsRequest.FiltersEntry\x12.\n\x08metadata\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x00\x88\x01\x01\x12,\n\x06values\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12*\n\x06status\x18\x04 \x01(\x0e\x32\x15.coreApi.ThreadStatusH\x02\x88\x01\x01\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\x42\x0b\n\t_metadataB\t\n\x07_valuesB\t\n\x07_status\";\n\x17SweepThreadsTTLResponse\x12\x0f\n\x07\x65xpired\x18\x01 \x01(\x04\x12\x0f\n\x07\x64\x65leted\x18\x02 \x01(\x04\"J\n\x16SweepThreadsTTLRequest\x12\x12\n\nbatch_size\x18\x01 \x01(\x04\x12\x12\n\x05limit\x18\x02 \x01(\x04H\x00\x88\x01\x01\x42\x08\n\x06_limit\"\x94\x02\n\x16SetThreadStatusRequest\x12 \n\tthread_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12%\n\x06status\x18\x02 \x01(\x0e\x32\x15.coreApi.ThreadStatus\x12\x33\n\ncheckpoint\x18\x03 \x01(\x0b\x32\x1a.coreApi.CheckpointPayloadH\x00\x88\x01\x01\x12/\n\texception\x18\x04 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12.\n\x0f\x65xpected_status\x18\x05 \x03(\x0e\x32\x15.coreApi.ThreadStatusB\r\n\x0b_checkpointB\x0c\n\n_exception\"\xee\x01\n\x1bSetThreadJointStatusRequest\x12 \n\tthread_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12\x1d\n\x06run_id\x18\x02 \x01(\x0b\x32\r.coreApi.UUID\x12\x12\n\nrun_status\x18\x03 \x01(\t\x12\x10\n\x08graph_id\x18\x04 \x01(\t\x12\x33\n\ncheckpoint\x18\x05 \x01(\x0b\x32\x1a.coreApi.CheckpointPayloadH\x00\x88\x01\x01\x12\x16\n\texception\x18\x06 \x01(\tH\x01\x88\x01\x01\x42\r\n\x0b_checkpointB\x0c\n\n_exception\"\xd3\x01\n\x14JointRollbackRequest\x12 \n\tthread_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12\x1d\n\x06run_id\x18\x02 \x01(\x0b\x32\r.coreApi.UUID\x12\x10\n\x08graph_id\x18\x03 \x01(\t\x12\x33\n\ncheckpoint\x18\x04 \x01(\x0b\x32\x1a.coreApi.CheckpointPayloadH\x00\x88\x01\x01\x12\x16\n\texception\x18\x05 \x01(\tH\x01\x88\x01\x01\x42\r\n\x0b_checkpointB\x0c\n\n_exception\"\xcf\x04\n\tRunKwargs\x12$\n\x06\x63onfig\x18\x01 \x01(\x0b\x32\x0f.coreApi.ConfigH\x00\x88\x01\x01\x12-\n\x07\x63ontext\x18\x02 \x01(\x0b\x32\x17.google.protobuf.StructH\x01\x88\x01\x01\x12+\n\x05input\x18\x03 \x01(\x0b\x32\x17.google.protobuf.StructH\x02\x88\x01\x01\x12-\n\x07\x63ommand\x18\x04 \x01(\x0b\x32\x17.google.protobuf.StructH\x03\x88\x01\x01\x12(\n\x0bstream_mode\x18\x05 \x01(\x0e\x32\x13.coreApi.StreamMode\x12\x18\n\x10interrupt_before\x18\x06 \x03(\t\x12\x17\n\x0finterrupt_after\x18\x07 \x03(\t\x12\x14\n\x07webhook\x18\x08 \x01(\tH\x04\x88\x01\x01\x12\x15\n\rfeedback_keys\x18\t \x03(\t\x12\x16\n\ttemporary\x18\n \x01(\x08H\x05\x88\x01\x01\x12\x16\n\tsubgraphs\x18\x0b \x01(\x08H\x06\x88\x01\x01\x12\x16\n\tresumable\x18\x0c \x01(\x08H\x07\x88\x01\x01\x12\x1e\n\x11\x63heckpoint_during\x18\r \x01(\x08H\x08\x88\x01\x01\x12\x17\n\ndurability\x18\x0e \x01(\tH\t\x88\x01\x01\x42\t\n\x07_configB\n\n\x08_contextB\x08\n\x06_inputB\n\n\x08_commandB\n\n\x08_webhookB\x0c\n\n_temporaryB\x0c\n\n_subgraphsB\x0c\n\n_resumableB\x14\n\x12_checkpoint_duringB\r\n\x0b_durability\"\xf0\x02\n\x03Run\x12\x1d\n\x06run_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12 \n\tthread_id\x18\x02 \x01(\x0b\x32\r.coreApi.UUID\x12#\n\x0c\x61ssistant_id\x18\x03 \x01(\x0b\x32\r.coreApi.UUID\x12.\n\ncreated_at\x18\x04 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12.\n\nupdated_at\x18\x05 \x01(\x0b\x32\x1a.google.protobuf.Timestamp\x12\"\n\x06status\x18\x06 \x01(\x0e\x32\x12.coreApi.RunStatus\x12#\n\x08metadata\x18\x07 \x01(\x0b\x32\x11.coreApi.Fragment\x12\"\n\x06kwargs\x18\x08 \x01(\x0b\x32\x12.coreApi.RunKwargs\x12\x36\n\x12multitask_strategy\x18\t \x01(\x0e\x32\x1a.coreApi.MultitaskStrategy\"\x8a\x01\n\nQueueStats\x12\x11\n\tn_pending\x18\x01 \x01(\x04\x12\x11\n\tn_running\x18\x02 \x01(\x04\x12\x19\n\x0cmax_age_secs\x18\x03 \x01(\x01H\x00\x88\x01\x01\x12\x19\n\x0cmed_age_secs\x18\x04 \x01(\x01H\x01\x88\x01\x01\x42\x0f\n\r_max_age_secsB\x0f\n\r_med_age_secs\"-\n\x0eNextRunRequest\x12\x0c\n\x04wait\x18\x01 \x01(\x08\x12\r\n\x05limit\x18\x02 \x01(\x04\"<\n\x0eRunWithAttempt\x12\x19\n\x03run\x18\x01 \x01(\x0b\x32\x0c.coreApi.Run\x12\x0f\n\x07\x61ttempt\x18\x02 \x01(\x04\"8\n\x0fNextRunResponse\x12%\n\x04runs\x18\x01 \x03(\x0b\x32\x17.coreApi.RunWithAttempt\"\xe9\x05\n\x10\x43reateRunRequest\x12#\n\x0c\x61ssistant_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12\'\n\x06kwargs\x18\x02 \x01(\x0b\x32\x17.google.protobuf.Struct\x12\x37\n\x07\x66ilters\x18\x03 \x03(\x0b\x32&.coreApi.CreateRunRequest.FiltersEntry\x12%\n\tthread_id\x18\x04 \x01(\x0b\x32\r.coreApi.UUIDH\x00\x88\x01\x01\x12\x14\n\x07user_id\x18\x05 \x01(\tH\x01\x88\x01\x01\x12\"\n\x06run_id\x18\x06 \x01(\x0b\x32\r.coreApi.UUIDH\x02\x88\x01\x01\x12\'\n\x06status\x18\x07 \x01(\x0e\x32\x12.coreApi.RunStatusH\x03\x88\x01\x01\x12.\n\x08metadata\x18\x08 \x01(\x0b\x32\x17.google.protobuf.StructH\x04\x88\x01\x01\x12\'\n\x1aprevent_insert_if_inflight\x18\t \x01(\x08H\x05\x88\x01\x01\x12;\n\x12multitask_strategy\x18\n \x01(\x0e\x32\x1a.coreApi.MultitaskStrategyH\x06\x88\x01\x01\x12\x36\n\rif_not_exists\x18\x0b \x01(\x0e\x32\x1a.coreApi.CreateRunBehaviorH\x07\x88\x01\x01\x12\x1a\n\rafter_seconds\x18\x0c \x01(\x04H\x08\x88\x01\x01\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\x42\x0c\n\n_thread_idB\n\n\x08_user_idB\t\n\x07_run_idB\t\n\x07_statusB\x0b\n\t_metadataB\x1d\n\x1b_prevent_insert_if_inflightB\x15\n\x13_multitask_strategyB\x10\n\x0e_if_not_existsB\x10\n\x0e_after_seconds\"\xcb\x01\n\rGetRunRequest\x12\x1d\n\x06run_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12 \n\tthread_id\x18\x02 \x01(\x0b\x32\r.coreApi.UUID\x12\x34\n\x07\x66ilters\x18\x03 \x03(\x0b\x32#.coreApi.GetRunRequest.FiltersEntry\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\"\xd1\x01\n\x10\x44\x65leteRunRequest\x12\x1d\n\x06run_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12 \n\tthread_id\x18\x02 \x01(\x0b\x32\r.coreApi.UUID\x12\x37\n\x07\x66ilters\x18\x03 \x03(\x0b\x32&.coreApi.DeleteRunRequest.FiltersEntry\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\"V\n\x12\x43\x61ncelRunIdsTarget\x12 \n\tthread_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12\x1e\n\x07run_ids\x18\x02 \x03(\x0b\x32\r.coreApi.UUID\">\n\x12\x43\x61ncelStatusTarget\x12(\n\x06status\x18\x01 \x01(\x0e\x32\x18.coreApi.CancelRunStatus\"\xb3\x02\n\x10\x43\x61ncelRunRequest\x12\x37\n\x07\x66ilters\x18\x01 \x03(\x0b\x32&.coreApi.CancelRunRequest.FiltersEntry\x12.\n\x07run_ids\x18\x02 \x01(\x0b\x32\x1b.coreApi.CancelRunIdsTargetH\x00\x12-\n\x06status\x18\x03 \x01(\x0b\x32\x1b.coreApi.CancelStatusTargetH\x00\x12-\n\x06\x61\x63tion\x18\x04 \x01(\x0e\x32\x18.coreApi.CancelRunActionH\x01\x88\x01\x01\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\x42\x08\n\x06targetB\t\n\x07_action\"\xb6\x02\n\x11SearchRunsRequest\x12 \n\tthread_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12\x38\n\x07\x66ilters\x18\x02 \x03(\x0b\x32\'.coreApi.SearchRunsRequest.FiltersEntry\x12\x12\n\x05limit\x18\x03 \x01(\x04H\x00\x88\x01\x01\x12\x13\n\x06offset\x18\x04 \x01(\x04H\x01\x88\x01\x01\x12\'\n\x06status\x18\x05 \x01(\x0e\x32\x12.coreApi.RunStatusH\x02\x88\x01\x01\x12\x0e\n\x06select\x18\x06 \x03(\t\x1a\x43\n\x0c\x46iltersEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\"\n\x05value\x18\x02 \x01(\x0b\x32\x13.coreApi.AuthFilter:\x02\x38\x01\x42\x08\n\x06_limitB\t\n\x07_offsetB\t\n\x07_status\"0\n\x12SearchRunsResponse\x12\x1a\n\x04runs\x18\x01 \x03(\x0b\x32\x0c.coreApi.Run\"X\n\x13SetRunStatusRequest\x12\x1d\n\x06run_id\x18\x01 \x01(\x0b\x32\r.coreApi.UUID\x12\"\n\x06status\x18\x02 \x01(\x0e\x32\x12.coreApi.RunStatus\"3\n\x11SweepRunsResponse\x12\x1e\n\x07run_ids\x18\x01 \x03(\x0b\x32\r.coreApi.UUID*/\n\x12OnConflictBehavior\x12\t\n\x05RAISE\x10\x00\x12\x0e\n\nDO_NOTHING\x10\x01*\x1e\n\tSortOrder\x12\x08\n\x04\x44\x45SC\x10\x00\x12\x07\n\x03\x41SC\x10\x01*m\n\x10\x41ssistantsSortBy\x12\x0f\n\x0bUNSPECIFIED\x10\x00\x12\x10\n\x0c\x41SSISTANT_ID\x10\x01\x12\x0c\n\x08GRAPH_ID\x10\x02\x12\x08\n\x04NAME\x10\x03\x12\x0e\n\nCREATED_AT\x10\x04\x12\x0e\n\nUPDATED_AT\x10\x05*v\n\x0cThreadStatus\x12\x16\n\x12THREAD_STATUS_IDLE\x10\x00\x12\x16\n\x12THREAD_STATUS_BUSY\x10\x01\x12\x1d\n\x19THREAD_STATUS_INTERRUPTED\x10\x02\x12\x17\n\x13THREAD_STATUS_ERROR\x10\x03*3\n\x11ThreadTTLStrategy\x12\x1e\n\x1aTHREAD_TTL_STRATEGY_DELETE\x10\x00*\xa8\x01\n\x10\x43heckpointSource\x12!\n\x1d\x43HECKPOINT_SOURCE_UNSPECIFIED\x10\x00\x12\x1b\n\x17\x43HECKPOINT_SOURCE_INPUT\x10\x01\x12\x1a\n\x16\x43HECKPOINT_SOURCE_LOOP\x10\x02\x12\x1c\n\x18\x43HECKPOINT_SOURCE_UPDATE\x10\x03\x12\x1a\n\x16\x43HECKPOINT_SOURCE_FORK\x10\x04*\xab\x01\n\rThreadsSortBy\x12\x1f\n\x1bTHREADS_SORT_BY_UNSPECIFIED\x10\x00\x12\x1d\n\x19THREADS_SORT_BY_THREAD_ID\x10\x01\x12\x1e\n\x1aTHREADS_SORT_BY_CREATED_AT\x10\x02\x12\x1e\n\x1aTHREADS_SORT_BY_UPDATED_AT\x10\x03\x12\x1a\n\x16THREADS_SORT_BY_STATUS\x10\x04*\x9d\x01\n\tRunStatus\x12\x16\n\x12RUN_STATUS_PENDING\x10\x00\x12\x16\n\x12RUN_STATUS_RUNNING\x10\x01\x12\x14\n\x10RUN_STATUS_ERROR\x10\x02\x12\x16\n\x12RUN_STATUS_SUCCESS\x10\x03\x12\x16\n\x12RUN_STATUS_TIMEOUT\x10\x04\x12\x1a\n\x16RUN_STATUS_INTERRUPTED\x10\x05*\xb9\x01\n\x11MultitaskStrategy\x12\"\n\x1eMULTITASK_STRATEGY_UNSPECIFIED\x10\x00\x12\x1d\n\x19MULTITASK_STRATEGY_REJECT\x10\x01\x12\x1f\n\x1bMULTITASK_STRATEGY_ROLLBACK\x10\x02\x12 \n\x1cMULTITASK_STRATEGY_INTERRUPT\x10\x03\x12\x1e\n\x1aMULTITASK_STRATEGY_ENQUEUE\x10\x04*\xef\x01\n\nStreamMode\x12\x1b\n\x17STREAM_MODE_UNSPECIFIED\x10\x00\x12\x16\n\x12STREAM_MODE_VALUES\x10\x01\x12\x18\n\x14STREAM_MODE_MESSAGES\x10\x02\x12\x17\n\x13STREAM_MODE_UPDATES\x10\x03\x12\x16\n\x12STREAM_MODE_EVENTS\x10\x04\x12\x15\n\x11STREAM_MODE_DEBUG\x10\x05\x12\x15\n\x11STREAM_MODE_TASKS\x10\x06\x12\x1b\n\x17STREAM_MODE_CHECKPOINTS\x10\x07\x12\x16\n\x12STREAM_MODE_CUSTOM\x10\x08*`\n\x11\x43reateRunBehavior\x12#\n\x1fREJECT_RUN_IF_THREAD_NOT_EXISTS\x10\x00\x12&\n\"CREATE_THREAD_IF_THREAD_NOT_EXISTS\x10\x01*R\n\x0f\x43\x61ncelRunAction\x12\x1f\n\x1b\x43\x41NCEL_RUN_ACTION_INTERRUPT\x10\x00\x12\x1e\n\x1a\x43\x41NCEL_RUN_ACTION_ROLLBACK\x10\x01*j\n\x0f\x43\x61ncelRunStatus\x12\x1d\n\x19\x43\x41NCEL_RUN_STATUS_PENDING\x10\x00\x12\x1d\n\x19\x43\x41NCEL_RUN_STATUS_RUNNING\x10\x01\x12\x19\n\x15\x43\x41NCEL_RUN_STATUS_ALL\x10\x02\x32\xc1\x04\n\nAssistants\x12\x37\n\x03Get\x12\x1c.coreApi.GetAssistantRequest\x1a\x12.coreApi.Assistant\x12=\n\x06\x43reate\x12\x1f.coreApi.CreateAssistantRequest\x1a\x12.coreApi.Assistant\x12;\n\x05Patch\x12\x1e.coreApi.PatchAssistantRequest\x1a\x12.coreApi.Assistant\x12L\n\x06\x44\x65lete\x12\x1f.coreApi.DeleteAssistantRequest\x1a!.coreApi.DeleteAssistantsResponse\x12M\n\x06Search\x12 .coreApi.SearchAssistantsRequest\x1a!.coreApi.SearchAssistantsResponse\x12\x43\n\tSetLatest\x12\".coreApi.SetLatestAssistantRequest\x1a\x12.coreApi.Assistant\x12Z\n\x0bGetVersions\x12$.coreApi.GetAssistantVersionsRequest\x1a%.coreApi.GetAssistantVersionsResponse\x12@\n\x05\x43ount\x12\x1f.coreApi.CountAssistantsRequest\x1a\x16.coreApi.CountResponse2E\n\x05\x41\x64min\x12<\n\x08Truncate\x12\x18.coreApi.TruncateRequest\x1a\x16.google.protobuf.Empty2\xcd\x05\n\x07Threads\x12\x37\n\x06\x43reate\x12\x1c.coreApi.CreateThreadRequest\x1a\x0f.coreApi.Thread\x12\x31\n\x03Get\x12\x19.coreApi.GetThreadRequest\x1a\x0f.coreApi.Thread\x12\x35\n\x05Patch\x12\x1b.coreApi.PatchThreadRequest\x1a\x0f.coreApi.Thread\x12\x35\n\x06\x44\x65lete\x12\x1c.coreApi.DeleteThreadRequest\x1a\r.coreApi.UUID\x12G\n\x06Search\x12\x1d.coreApi.SearchThreadsRequest\x1a\x1e.coreApi.SearchThreadsResponse\x12=\n\x05\x43ount\x12\x1c.coreApi.CountThreadsRequest\x1a\x16.coreApi.CountResponse\x12\x33\n\x04\x43opy\x12\x1a.coreApi.CopyThreadRequest\x1a\x0f.coreApi.Thread\x12\x44\n\tSetStatus\x12\x1f.coreApi.SetThreadStatusRequest\x1a\x16.google.protobuf.Empty\x12N\n\x0eSetJointStatus\x12$.coreApi.SetThreadJointStatusRequest\x1a\x16.google.protobuf.Empty\x12\x46\n\rJointRollback\x12\x1d.coreApi.JointRollbackRequest\x1a\x16.google.protobuf.Empty\x12M\n\x08SweepTTL\x12\x1f.coreApi.SweepThreadsTTLRequest\x1a .coreApi.SweepThreadsTTLResponse2\x8b\x04\n\x04Runs\x12\x31\n\x06\x43reate\x12\x19.coreApi.CreateRunRequest\x1a\x0c.coreApi.Run\x12+\n\x03Get\x12\x16.coreApi.GetRunRequest\x1a\x0c.coreApi.Run\x12\x32\n\x06\x44\x65lete\x12\x19.coreApi.DeleteRunRequest\x1a\r.coreApi.UUID\x12\x41\n\x06Search\x12\x1a.coreApi.SearchRunsRequest\x1a\x1b.coreApi.SearchRunsResponse\x12;\n\x06\x43\x61ncel\x12\x19.coreApi.CancelRunRequest\x1a\x16.google.protobuf.Empty\x12\x41\n\tSetStatus\x12\x1c.coreApi.SetRunStatusRequest\x1a\x16.google.protobuf.Empty\x12\x34\n\x05Stats\x12\x16.google.protobuf.Empty\x1a\x13.coreApi.QueueStats\x12\x39\n\x04Next\x12\x17.coreApi.NextRunRequest\x1a\x18.coreApi.NextRunResponse\x12;\n\x05Sweep\x12\x16.google.protobuf.Empty\x1a\x1a.coreApi.SweepRunsResponseBAZ?github.com/langchain-ai/langgraph-api/core/internal/core-api/pbb\x06proto3')
|
|
31
31
|
|
|
32
32
|
_globals = globals()
|
|
33
33
|
_builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
|
|
34
34
|
_builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'core_api_pb2', _globals)
|
|
35
35
|
if not _descriptor._USE_C_DESCRIPTORS:
|
|
36
36
|
_globals['DESCRIPTOR']._loaded_options = None
|
|
37
|
-
_globals['DESCRIPTOR']._serialized_options = b'Z
|
|
37
|
+
_globals['DESCRIPTOR']._serialized_options = b'Z?github.com/langchain-ai/langgraph-api/core/internal/core-api/pb'
|
|
38
38
|
_globals['_CREATEASSISTANTREQUEST_FILTERSENTRY']._loaded_options = None
|
|
39
39
|
_globals['_CREATEASSISTANTREQUEST_FILTERSENTRY']._serialized_options = b'8\001'
|
|
40
40
|
_globals['_GETASSISTANTREQUEST_FILTERSENTRY']._loaded_options = None
|
|
@@ -5,6 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
import asyncio
|
|
6
6
|
import functools
|
|
7
7
|
from collections.abc import AsyncIterator
|
|
8
|
+
from datetime import UTC
|
|
8
9
|
from http import HTTPStatus
|
|
9
10
|
from typing import Any
|
|
10
11
|
from uuid import UUID
|
|
@@ -151,8 +152,8 @@ def proto_to_assistant(proto_assistant: pb.Assistant) -> Assistant:
|
|
|
151
152
|
"assistant_id": proto_assistant.assistant_id,
|
|
152
153
|
"graph_id": proto_assistant.graph_id,
|
|
153
154
|
"version": proto_assistant.version,
|
|
154
|
-
"created_at": proto_assistant.created_at.ToDatetime(),
|
|
155
|
-
"updated_at": proto_assistant.updated_at.ToDatetime(),
|
|
155
|
+
"created_at": proto_assistant.created_at.ToDatetime(tzinfo=UTC),
|
|
156
|
+
"updated_at": proto_assistant.updated_at.ToDatetime(tzinfo=UTC),
|
|
156
157
|
"config": _runnable_config_to_user_dict(proto_assistant.config),
|
|
157
158
|
"context": struct_to_dict(proto_assistant.context),
|
|
158
159
|
"metadata": struct_to_dict(proto_assistant.metadata),
|
|
@@ -571,7 +572,7 @@ class Assistants(Authenticated):
|
|
|
571
572
|
"assistant_id": version.assistant_id,
|
|
572
573
|
"graph_id": version.graph_id,
|
|
573
574
|
"version": version.version,
|
|
574
|
-
"created_at": version.created_at.ToDatetime(),
|
|
575
|
+
"created_at": version.created_at.ToDatetime(tzinfo=UTC),
|
|
575
576
|
"config": _runnable_config_to_user_dict(version.config),
|
|
576
577
|
"context": struct_to_dict(version.context),
|
|
577
578
|
"metadata": struct_to_dict(version.metadata),
|
|
@@ -26,11 +26,17 @@ from langgraph_sdk.client import configure_loopback_transports
|
|
|
26
26
|
from starlette.applications import Starlette
|
|
27
27
|
from starlette.middleware import Middleware
|
|
28
28
|
from starlette.middleware.cors import CORSMiddleware
|
|
29
|
-
from starlette.routing import Mount
|
|
29
|
+
from starlette.routing import BaseRoute, Mount
|
|
30
30
|
from starlette.types import Receive, Scope, Send
|
|
31
31
|
|
|
32
32
|
import langgraph_api.config as config
|
|
33
|
-
from langgraph_api.api import
|
|
33
|
+
from langgraph_api.api import (
|
|
34
|
+
middleware_for_protected_routes,
|
|
35
|
+
protected_routes,
|
|
36
|
+
shadowable_meta_routes,
|
|
37
|
+
unshadowable_meta_routes,
|
|
38
|
+
user_router,
|
|
39
|
+
)
|
|
34
40
|
from langgraph_api.api.openapi import set_custom_spec
|
|
35
41
|
from langgraph_api.errors import (
|
|
36
42
|
overloaded_error_handler,
|
|
@@ -48,10 +54,10 @@ from langgraph_runtime.retry import OVERLOADED_EXCEPTIONS
|
|
|
48
54
|
logging.captureWarnings(True)
|
|
49
55
|
logger = structlog.stdlib.get_logger(__name__)
|
|
50
56
|
|
|
51
|
-
|
|
57
|
+
global_middleware = []
|
|
52
58
|
|
|
53
59
|
if config.ALLOW_PRIVATE_NETWORK:
|
|
54
|
-
|
|
60
|
+
global_middleware.append(Middleware(PrivateNetworkMiddleware))
|
|
55
61
|
|
|
56
62
|
JS_PROXY_MIDDLEWARE_ENABLED = (
|
|
57
63
|
config.HTTP_CONFIG
|
|
@@ -62,9 +68,9 @@ JS_PROXY_MIDDLEWARE_ENABLED = (
|
|
|
62
68
|
if JS_PROXY_MIDDLEWARE_ENABLED:
|
|
63
69
|
from langgraph_api.js.remote import JSCustomHTTPProxyMiddleware
|
|
64
70
|
|
|
65
|
-
|
|
71
|
+
global_middleware.append(Middleware(JSCustomHTTPProxyMiddleware))
|
|
66
72
|
|
|
67
|
-
|
|
73
|
+
global_middleware.extend(
|
|
68
74
|
[
|
|
69
75
|
(
|
|
70
76
|
Middleware(
|
|
@@ -120,32 +126,84 @@ def update_openapi_spec(app):
|
|
|
120
126
|
set_custom_spec(spec)
|
|
121
127
|
|
|
122
128
|
|
|
129
|
+
def apply_middleware(
|
|
130
|
+
routes: list[BaseRoute], middleware: list[Middleware]
|
|
131
|
+
) -> list[BaseRoute]:
|
|
132
|
+
"""Applies middleware to a list of routes.
|
|
133
|
+
|
|
134
|
+
Routes are modified in place (only the `app` attribute is modified);
|
|
135
|
+
the modified routes are returned for convenience.
|
|
136
|
+
"""
|
|
137
|
+
middleware_routes = []
|
|
138
|
+
for route in routes:
|
|
139
|
+
for cls, args, kwargs in reversed(middleware):
|
|
140
|
+
if hasattr(route, "app"):
|
|
141
|
+
route.app = cls(route.app, *args, **kwargs) # type: ignore
|
|
142
|
+
else:
|
|
143
|
+
raise ValueError(f"Cannot apply middleware: route {route} has no app")
|
|
144
|
+
middleware_routes.append(route)
|
|
145
|
+
return middleware_routes
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
custom_middleware = (
|
|
149
|
+
user_router.user_middleware if user_router and user_router.user_middleware else []
|
|
150
|
+
)
|
|
151
|
+
auth_before_custom_middleware = (
|
|
152
|
+
config.HTTP_CONFIG and config.HTTP_CONFIG.get("middleware_order") == "auth_first"
|
|
153
|
+
)
|
|
154
|
+
# Custom middleware to be applied at the route/mount level, not globally (app level).
|
|
155
|
+
route_level_custom_middleware = (
|
|
156
|
+
custom_middleware if auth_before_custom_middleware else []
|
|
157
|
+
)
|
|
158
|
+
|
|
159
|
+
protected_mount = Mount(
|
|
160
|
+
"",
|
|
161
|
+
routes=protected_routes,
|
|
162
|
+
middleware=(
|
|
163
|
+
middleware_for_protected_routes + route_level_custom_middleware
|
|
164
|
+
if auth_before_custom_middleware
|
|
165
|
+
else route_level_custom_middleware + middleware_for_protected_routes
|
|
166
|
+
),
|
|
167
|
+
)
|
|
168
|
+
|
|
169
|
+
|
|
123
170
|
if user_router:
|
|
124
171
|
# Merge routes
|
|
125
172
|
app = user_router
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
173
|
+
if auth_before_custom_middleware:
|
|
174
|
+
# Authentication middleware is only applied to protected routes--
|
|
175
|
+
# it is *not* global middleware. This means that by default,
|
|
176
|
+
# authentication middleware is necessarily applied *after* any global middleware.
|
|
177
|
+
# including custom middleware that the user might have supplied.
|
|
178
|
+
#
|
|
179
|
+
# To apply authentication middleware before custom middleware,
|
|
180
|
+
# we must rearrange things a bit:
|
|
181
|
+
# 1. Extract user-supplied routes and bundle them into a `Mount`
|
|
182
|
+
# so that we can easily apply custom middleware to all of them at once.
|
|
183
|
+
# 2. Extract custom middleware from the user-supplied app.
|
|
184
|
+
# Remove it globally, but apply it to each bundle of routes at the mount level.
|
|
185
|
+
# This gives us more flexibility in ordering: we can now apply this
|
|
186
|
+
# custom middleware before *or* after authentication middleware,
|
|
187
|
+
# depending on the `middleware_order` config.
|
|
188
|
+
user_app = apply_middleware(
|
|
189
|
+
routes=app.routes, middleware=route_level_custom_middleware
|
|
190
|
+
)
|
|
191
|
+
app.user_middleware = global_middleware
|
|
192
|
+
else:
|
|
193
|
+
user_app = app.routes
|
|
194
|
+
app.user_middleware = custom_middleware + global_middleware
|
|
195
|
+
|
|
196
|
+
app.router.routes = (
|
|
197
|
+
apply_middleware(unshadowable_meta_routes, route_level_custom_middleware)
|
|
198
|
+
+ user_app
|
|
199
|
+
+ apply_middleware(shadowable_meta_routes, route_level_custom_middleware)
|
|
200
|
+
+ [protected_mount]
|
|
201
|
+
)
|
|
136
202
|
|
|
137
203
|
update_openapi_spec(app)
|
|
138
|
-
for route in routes:
|
|
139
|
-
if getattr(route, "path", None) in ("/docs", "/openapi.json"):
|
|
140
|
-
# Our handlers for these are inclusive of the custom routes and default API ones
|
|
141
|
-
# Don't let these be shadowed
|
|
142
|
-
app.router.routes.insert(0, route)
|
|
143
|
-
else:
|
|
144
|
-
# Everything else could be shadowed.
|
|
145
|
-
app.router.routes.append(route)
|
|
146
204
|
|
|
147
|
-
# Merge lifespans
|
|
148
|
-
|
|
205
|
+
# Merge lifespans (base + user)
|
|
206
|
+
user_lifespan = app.router.lifespan_context
|
|
149
207
|
if app.router.on_startup or app.router.on_shutdown:
|
|
150
208
|
raise ValueError(
|
|
151
209
|
f"Cannot merge lifespans with on_startup or on_shutdown: {app.router.on_startup} {app.router.on_shutdown}"
|
|
@@ -154,17 +212,15 @@ if user_router:
|
|
|
154
212
|
@asynccontextmanager
|
|
155
213
|
async def combined_lifespan(app):
|
|
156
214
|
async with lifespan(app):
|
|
157
|
-
if
|
|
158
|
-
async with
|
|
215
|
+
if user_lifespan:
|
|
216
|
+
async with user_lifespan(app):
|
|
159
217
|
yield
|
|
160
218
|
else:
|
|
161
219
|
yield
|
|
162
220
|
|
|
163
221
|
app.router.lifespan_context = combined_lifespan
|
|
164
222
|
|
|
165
|
-
# Merge
|
|
166
|
-
app.user_middleware = (app.user_middleware or []) + middleware
|
|
167
|
-
# Merge exception handlers
|
|
223
|
+
# Merge exception handlers (base + user)
|
|
168
224
|
for k, v in exception_handlers.items():
|
|
169
225
|
if k not in app.exception_handlers:
|
|
170
226
|
app.exception_handlers[k] = v
|
|
@@ -173,16 +229,20 @@ if user_router:
|
|
|
173
229
|
# If the user creates a loopback client with `get_client() (no url)
|
|
174
230
|
# this will update the http transport to connect to the right app
|
|
175
231
|
configure_loopback_transports(app)
|
|
176
|
-
|
|
177
232
|
else:
|
|
178
233
|
# It's a regular starlette app
|
|
179
234
|
app = Starlette(
|
|
180
|
-
routes=
|
|
235
|
+
routes=apply_middleware(
|
|
236
|
+
unshadowable_meta_routes + shadowable_meta_routes,
|
|
237
|
+
route_level_custom_middleware,
|
|
238
|
+
)
|
|
239
|
+
+ [protected_mount],
|
|
181
240
|
lifespan=lifespan,
|
|
182
|
-
middleware=
|
|
241
|
+
middleware=global_middleware,
|
|
183
242
|
exception_handlers=exception_handlers,
|
|
184
243
|
)
|
|
185
244
|
|
|
245
|
+
|
|
186
246
|
if config.MOUNT_PREFIX:
|
|
187
247
|
prefix = config.MOUNT_PREFIX
|
|
188
248
|
if not prefix.startswith("/") or prefix.endswith("/"):
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.4.34"
|
|
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
|
{langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/grpc_ops/generated/core_api_pb2.pyi
RENAMED
|
File without changes
|
{langgraph_api-0.4.34 → langgraph_api-0.4.35}/langgraph_api/grpc_ops/generated/core_api_pb2_grpc.py
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
|