langgraph-api 0.4.34__py3-none-any.whl → 0.4.35__py3-none-any.whl

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/__init__.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.4.34"
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, Mount, Route
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
- meta_routes: list[BaseRoute] = [
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 router_import := HTTP_CONFIG.get("app"):
135
- user_router = load_custom_app(router_import)
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
- if protected_routes:
146
- routes.append(
147
- Mount(
148
- "/",
149
- middleware=[auth_middleware],
150
- routes=protected_routes,
151
- ),
152
- )
140
+ ]
141
+ unshadowable_meta_routes = []
153
142
 
154
- else:
155
- routes.extend(meta_routes)
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
- routes.insert(0, Route("/internal/truncate", truncate, methods=["POST"]))
157
+ unshadowable_meta_routes.insert(
158
+ 0, Route("/internal/truncate", truncate, methods=["POST"])
159
+ )
langgraph_api/graph.py CHANGED
@@ -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
- await register_graph_db()
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 config.API_VARIANT == "local_dev":
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
- config.HTTP_CONFIG
392
- and (js_app := config.HTTP_CONFIG.get("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
- config.HTTP_CONFIG or {},
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 config.API_VARIANT == "local_dev":
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 config.API_VARIANT == "local_dev":
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 config.API_VARIANT == "local_dev":
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"
@@ -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:github.com/langchain-ai/langgraph-api/core-api/internal/pb'
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),
langgraph_api/server.py CHANGED
@@ -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 meta_routes, routes, user_router
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
- middleware = []
57
+ global_middleware = []
52
58
 
53
59
  if config.ALLOW_PRIVATE_NETWORK:
54
- middleware.append(Middleware(PrivateNetworkMiddleware))
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
- middleware.append(Middleware(JSCustomHTTPProxyMiddleware))
71
+ global_middleware.append(Middleware(JSCustomHTTPProxyMiddleware))
66
72
 
67
- middleware.extend(
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
- meta_route_paths = [
128
- getattr(route, "path", None) for route in meta_routes if hasattr(route, "path")
129
- ]
130
- custom_route_paths = [
131
- route.path
132
- for route in user_router.router.routes
133
- if hasattr(route, "path") and route.path not in meta_route_paths
134
- ]
135
- logger.info(f"Custom route paths: {custom_route_paths}")
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
- original_lifespan = app.router.lifespan_context
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 original_lifespan:
158
- async with original_lifespan(app):
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 middleware
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=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=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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.4.34
3
+ Version: 0.4.35
4
4
  Author-email: Nuno Campos <nuno@langchain.dev>, Will Fu-Hinthorn <will@langchain.dev>
5
5
  License: Elastic-2.0
6
6
  License-File: LICENSE
@@ -1,4 +1,4 @@
1
- langgraph_api/__init__.py,sha256=lEcP5iYKQN3Lr-tUbNBN0qjKzIg4RjGwnIQfJt42ids,23
1
+ langgraph_api/__init__.py,sha256=FEgXfNl5unGEmH5buNZAXb9QxKMPrxW7EBQw1Tzh0A8,23
2
2
  langgraph_api/asgi_transport.py,sha256=XtiLOu4WWsd-xizagBLzT5xUkxc9ZG9YqwvETBPjBFE,5161
3
3
  langgraph_api/asyncio.py,sha256=FEEkLm_N-15cbElo4vQ309MkDKBZuRqAYV8VJ1DocNw,9860
4
4
  langgraph_api/cli.py,sha256=o_zD2vkky06dzW87HQgkIR1_h3ZCSZ8tgNvFCK9rKVo,19669
@@ -8,7 +8,7 @@ langgraph_api/cron_scheduler.py,sha256=25wYzEQrhPEivZrAPYOmzLPDOQa-aFogU37mTXc9T
8
8
  langgraph_api/errors.py,sha256=zlnl3xXIwVG0oGNKKpXf1an9Rn_SBDHSyhe53hU6aLw,1858
9
9
  langgraph_api/executor_entrypoint.py,sha256=CaX813ygtf9CpOaBkfkQXJAHjFtmlScCkrOvTDmu4Aw,750
10
10
  langgraph_api/feature_flags.py,sha256=taZRhukeBV8r62EmEo92rxfBwYhIw56-P_UvSzQLzt8,576
11
- langgraph_api/graph.py,sha256=1lrWBjPLtYFJjI0tVanCYlLWkULfj755yEmvuyXW9_g,25166
11
+ langgraph_api/graph.py,sha256=YDNncFFnjOjX_ylHDVY3Z4Ehj62zyHFJPaiRCkLAZus,25285
12
12
  langgraph_api/http.py,sha256=fyK-H-0UfNy_BzuVW3aWWGvhRavmGAVMkDwDArryJ_4,5659
13
13
  langgraph_api/http_metrics.py,sha256=iOJKQW8VdgkhWp5aBjy1RUghH5noxJTVFPEmmXwgCbE,5097
14
14
  langgraph_api/http_metrics_utils.py,sha256=sjxF7SYGTzY0Wz_G0dzatsYNnWr31S6ujej4JmBG2yo,866
@@ -20,7 +20,7 @@ langgraph_api/route.py,sha256=EBhELuJ1He-ZYcAnR5YTImcIeDtWthDae5CHELBxPkM,5056
20
20
  langgraph_api/schema.py,sha256=spZ_XPT4AMJfw2YatsdnMZZLzgB9Sm3YR8n0SlgGdJ8,8480
21
21
  langgraph_api/self_hosted_metrics.py,sha256=JyDGs7lTKndL_vdtGq4rbPtOGdxCkil9_u6d_wTJeds,13980
22
22
  langgraph_api/serde.py,sha256=Jkww6ixP5o2YZmnXtM7ihuAYC6YSuNDNPvE-8ILoqVo,5499
23
- langgraph_api/server.py,sha256=C9TO7N0mzyrLulT_2FtaJfgfFbm2B4yyYTdAGPxgIeE,7255
23
+ langgraph_api/server.py,sha256=NNn9aqs74gfvL1amp_2oylamxt4UAD43QD6DQMhB6iA,9656
24
24
  langgraph_api/sse.py,sha256=SLdtZmTdh5D8fbWrQjuY9HYLd2dg8Rmi6ZMmFMVc2iE,4204
25
25
  langgraph_api/state.py,sha256=AjkLbUQakIwK7oGzJ8oqubazRsXxG3vDMnRa0s0mzDM,4716
26
26
  langgraph_api/store.py,sha256=NIoNZojs6NbtG3VLBPQEFNttvp7XPkHAfjbQ3gY7aLY,4701
@@ -30,7 +30,7 @@ langgraph_api/traceblock.py,sha256=Qq5CUdefnMDaRDnyvBSWGBClEj-f3oO7NbH6fedxOSE,6
30
30
  langgraph_api/validation.py,sha256=86jftgOsMa7tkeshBw6imYe7zyUXPoVuf5Voh6dFiR8,5285
31
31
  langgraph_api/webhook.py,sha256=SvSM1rdnNtiH4q3JQYmAqJUk2Sable5xAcwOLuRhtlo,1723
32
32
  langgraph_api/worker.py,sha256=HHgf590xElF7v02lgn0lG0iK2v2sENMjdx7TVFCvYXY,15399
33
- langgraph_api/api/__init__.py,sha256=raFkYH50tsO-KjRmDbGVoHCuxuH58u1lrZbr-MlITIY,6262
33
+ langgraph_api/api/__init__.py,sha256=wrnxz_204b2Vhv4-N0WpiPf-ZpDDlmIQkbh-TiXPnOo,5997
34
34
  langgraph_api/api/a2a.py,sha256=HIHZkLnIcM1u1FJti-L2NH-h1I9BZ_d-QW9z3gFonn8,53995
35
35
  langgraph_api/api/assistants.py,sha256=VxndCdWSWnLY-A5C7nMGdVaDsHDi7SpKREwx5vbWPG8,17445
36
36
  langgraph_api/api/mcp.py,sha256=qe10ZRMN3f-Hli-9TI8nbQyWvMeBb72YB1PZVbyqBQw,14418
@@ -50,9 +50,9 @@ langgraph_api/auth/langsmith/backend.py,sha256=rdkz8IXLHusJqcoacvl2XuMZnQVR7PLpE
50
50
  langgraph_api/auth/langsmith/client.py,sha256=Kn9503en1tmlNtkbvqRxYSRCOUrWaVpqvxyLLb1cgzY,3908
51
51
  langgraph_api/grpc_ops/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
52
  langgraph_api/grpc_ops/client.py,sha256=VB740C9QMhJJrpAEjsADmasN-uGd0apGYtuv_ho0Rl8,2452
53
- langgraph_api/grpc_ops/ops.py,sha256=N9OqaMXdTUdQaTZ13gb0SCPkqtVy_NzhVGuqbAUBtsY,19678
53
+ langgraph_api/grpc_ops/ops.py,sha256=VFmFIgXZmE3Xi1tGx-eZrqls6qMG0w5a2Ym7w2Wm9Iw,19733
54
54
  langgraph_api/grpc_ops/generated/__init__.py,sha256=dRiB_iGscPKdMpuLp9ueLwAmIfRaNjNXC64ABtb4cg8,135
55
- langgraph_api/grpc_ops/generated/core_api_pb2.py,sha256=dDfkz_GlwEONJy6ysECWwFLhKSciBy_B0pn6rpMTE6I,42139
55
+ langgraph_api/grpc_ops/generated/core_api_pb2.py,sha256=fY01nY_MwlujYiyZcNMvR2DGEnyIkYbZ59p6mNjQKZE,42149
56
56
  langgraph_api/grpc_ops/generated/core_api_pb2.pyi,sha256=-vJ6C020K9Kt44mH7-S9sy0QBLMXJsyB3T9AKIH1s4g,49184
57
57
  langgraph_api/grpc_ops/generated/core_api_pb2_grpc.py,sha256=Qav2DuCMUSmR8nP4-fVtUBbY0Vc42jqjCs3L4LdIl-0,52467
58
58
  langgraph_api/js/.gitignore,sha256=l5yI6G_V6F1600I1IjiUKn87f4uYIrBAYU1MOyBBhg4,59
@@ -109,8 +109,8 @@ langgraph_runtime/store.py,sha256=7mowndlsIroGHv3NpTSOZDJR0lCuaYMBoTnTrewjslw,11
109
109
  LICENSE,sha256=ZPwVR73Biwm3sK6vR54djCrhaRiM4cAD2zvOQZV8Xis,3859
110
110
  logging.json,sha256=3RNjSADZmDq38eHePMm1CbP6qZ71AmpBtLwCmKU9Zgo,379
111
111
  openapi.json,sha256=21wu-NxdxyTQwZctNcEfRkLMnSBi0QhGAfwq5kg8XNU,172618
112
- langgraph_api-0.4.34.dist-info/METADATA,sha256=E-ygusr5NACu0zpUqQuZA2ikRGH6mLeKgg2lTsRkfjs,4156
113
- langgraph_api-0.4.34.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
114
- langgraph_api-0.4.34.dist-info/entry_points.txt,sha256=hGedv8n7cgi41PypMfinwS_HfCwA7xJIfS0jAp8htV8,78
115
- langgraph_api-0.4.34.dist-info/licenses/LICENSE,sha256=ZPwVR73Biwm3sK6vR54djCrhaRiM4cAD2zvOQZV8Xis,3859
116
- langgraph_api-0.4.34.dist-info/RECORD,,
112
+ langgraph_api-0.4.35.dist-info/METADATA,sha256=dSrZQMcNAkuHOLC5SVZ2J-cAJECyEnqzbpjyfsNamRs,4156
113
+ langgraph_api-0.4.35.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
114
+ langgraph_api-0.4.35.dist-info/entry_points.txt,sha256=hGedv8n7cgi41PypMfinwS_HfCwA7xJIfS0jAp8htV8,78
115
+ langgraph_api-0.4.35.dist-info/licenses/LICENSE,sha256=ZPwVR73Biwm3sK6vR54djCrhaRiM4cAD2zvOQZV8Xis,3859
116
+ langgraph_api-0.4.35.dist-info/RECORD,,