langgraph-api 0.11.0.dev1__py3-none-any.whl → 0.11.0.dev3__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.
langgraph_api/__init__.py CHANGED
@@ -1 +1 @@
1
- __version__ = "0.11.0.dev1"
1
+ __version__ = "0.11.0.dev3"
@@ -578,6 +578,8 @@ METRIC_MAX_EMITTING_TIER = env(
578
578
  "METRIC_MAX_EMITTING_TIER", cast=int, default=_METRIC_MAX_EMITTING_TIER_DEFAULT
579
579
  )
580
580
  DATADOG_METRICS_ENABLED = bool(LSD_DD_API_KEY)
581
+ LSD_PROM_METRICS_ENABLED = env("LSD_PROM_METRICS_ENABLED", cast=bool, default=False)
582
+ LSD_PROM_METRICS_PORT = env("LSD_PROM_METRICS_PORT", cast=int, default=9464)
581
583
  LANGGRAPH_LOGS_ENDPOINT = env("LANGGRAPH_LOGS_ENDPOINT", cast=str, default=None)
582
584
  LANGGRAPH_LOGS_ENABLED = env("LANGGRAPH_LOGS_ENABLED", cast=bool, default=False)
583
585
 
@@ -672,6 +674,8 @@ __all__ = [
672
674
  "LSD_GRPC_SERVER_ADDRESS",
673
675
  "LSD_GRPC_SERVER_MAX_RECV_MSG_BYTES",
674
676
  "LSD_GRPC_SERVER_MAX_SEND_MSG_BYTES",
677
+ "LSD_PROM_METRICS_ENABLED",
678
+ "LSD_PROM_METRICS_PORT",
675
679
  "MAX_STREAM_CHUNK_SIZE_BYTES",
676
680
  "METRIC_MAX_EMITTING_TIER",
677
681
  "METRIC_PREFIX",
@@ -39,7 +39,7 @@ from langgraph_api.event_streaming.types import (
39
39
  NamespaceInfo,
40
40
  Subscription,
41
41
  )
42
- from langgraph_api.metrics_datadog import (
42
+ from langgraph_api.metrics_otlp import (
43
43
  COUNTER_PROTOCOL_V2_BUFFER_EVICTED,
44
44
  COUNTER_PROTOCOL_V2_EVENT_EMITTED,
45
45
  COUNTER_PROTOCOL_V2_RESUME_GAP,
@@ -47,7 +47,7 @@ from langgraph_api.metrics_datadog import (
47
47
  COUNTER_STREAMING_DATA_LOSS,
48
48
  GAUGE_PROTOCOL_V2_BUFFER_SIZE,
49
49
  HISTOGRAM_PROTOCOL_V2_REPLAYED_EVENTS,
50
- get_datadog_metrics_reporter,
50
+ get_otlp_metrics_reporter,
51
51
  )
52
52
 
53
53
  logger = structlog.stdlib.get_logger(__name__)
@@ -937,7 +937,7 @@ class EventStreamingSession:
937
937
 
938
938
  async def _push_event(self, event: dict[str, Any]) -> None:
939
939
  self._buffer.append(event)
940
- reporter = get_datadog_metrics_reporter()
940
+ reporter = get_otlp_metrics_reporter()
941
941
  if len(self._buffer) > self._max_buffer_size:
942
942
  evicted = len(self._buffer) - self._max_buffer_size
943
943
  self._buffer = self._buffer[-self._max_buffer_size :]
@@ -1023,7 +1023,7 @@ class EventStreamingSession:
1023
1023
  min_available_seq = self._buffer[0].get("seq", 0)
1024
1024
  if isinstance(min_available_seq, int) and since + 1 < min_available_seq:
1025
1025
  try:
1026
- get_datadog_metrics_reporter().inc_counter(
1026
+ get_otlp_metrics_reporter().inc_counter(
1027
1027
  COUNTER_PROTOCOL_V2_RESUME_GAP
1028
1028
  )
1029
1029
  except Exception:
@@ -1058,7 +1058,7 @@ class EventStreamingSession:
1058
1058
 
1059
1059
  subscription.active = True
1060
1060
  try:
1061
- get_datadog_metrics_reporter().record_histogram(
1061
+ get_otlp_metrics_reporter().record_histogram(
1062
1062
  HISTOGRAM_PROTOCOL_V2_REPLAYED_EVENTS,
1063
1063
  float(replayed),
1064
1064
  )
@@ -1129,7 +1129,7 @@ class EventStreamingSession:
1129
1129
  # session down shortly after the first failure.
1130
1130
  self._transport_broken = True
1131
1131
  try:
1132
- get_datadog_metrics_reporter().inc_counter(
1132
+ get_otlp_metrics_reporter().inc_counter(
1133
1133
  COUNTER_PROTOCOL_V2_TRANSPORT_SEND_FAILURE,
1134
1134
  attributes={"method": _metric_event_method(message)},
1135
1135
  )
@@ -48,6 +48,16 @@ else:
48
48
  MetricExporter = object
49
49
  OTEL_AVAILABLE = False
50
50
 
51
+ try:
52
+ from opentelemetry.exporter.prometheus import PrometheusMetricReader
53
+ from prometheus_client import start_http_server
54
+
55
+ PROMETHEUS_EXPORTER_AVAILABLE = True
56
+ except ModuleNotFoundError:
57
+ PrometheusMetricReader = None
58
+ start_http_server = None
59
+ PROMETHEUS_EXPORTER_AVAILABLE = False
60
+
51
61
  logger = structlog.stdlib.get_logger(__name__)
52
62
 
53
63
  SERVICE_NAME = "lsd_langgraph_api"
@@ -213,7 +223,7 @@ class _FilteringExporter(MetricExporter):
213
223
  return self._exporter.force_flush(timeout_millis)
214
224
 
215
225
 
216
- class DatadogMetricsReporter:
226
+ class OTelMetricsReporter:
217
227
  def __init__(self) -> None:
218
228
  self._lock = threading.Lock()
219
229
  self._initialized = False
@@ -222,6 +232,8 @@ class DatadogMetricsReporter:
222
232
  self._meter = None
223
233
  self._max_tier = _normalize_emitting_tier(config.METRIC_MAX_EMITTING_TIER)
224
234
  self._instruments: dict[str, Any] = {}
235
+ self._prom_enabled = False
236
+ self._prom_server: Any | None = None
225
237
 
226
238
  @property
227
239
  def enabled(self) -> bool:
@@ -233,12 +245,17 @@ class DatadogMetricsReporter:
233
245
  return
234
246
  self._initialized = True
235
247
 
236
- if not config.DATADOG_METRICS_ENABLED:
237
- logger.info("Datadog metrics disabled (no DD API key configured)")
248
+ if (
249
+ not config.DATADOG_METRICS_ENABLED
250
+ and not config.LSD_PROM_METRICS_ENABLED
251
+ ):
252
+ logger.info(
253
+ "OTel metrics disabled (no DD API key and Prometheus not enabled)"
254
+ )
238
255
  return
239
256
  if not OTEL_AVAILABLE:
240
257
  logger.warning(
241
- "Datadog metrics disabled because OpenTelemetry dependencies are not installed"
258
+ "OTel metrics disabled because OpenTelemetry dependencies are not installed"
242
259
  )
243
260
  return
244
261
 
@@ -247,7 +264,6 @@ class DatadogMetricsReporter:
247
264
  {
248
265
  "service.name": SERVICE_NAME,
249
266
  "host.id": os.getenv("HOSTNAME", ""),
250
- # Not in public docs: these LANGSMITH_* vars are set by SaaS control plane
251
267
  "api_version": os.getenv("LANGSMITH_LANGGRAPH_API_VERSION")
252
268
  or __version__,
253
269
  "project_id": os.getenv("LANGSMITH_HOST_PROJECT_ID", ""),
@@ -260,58 +276,117 @@ class DatadogMetricsReporter:
260
276
  "deployment_type": os.getenv("LSD_DEPLOYMENT_TYPE", ""),
261
277
  }
262
278
  )
263
- base_exporter = OTLPMetricExporter(
264
- endpoint=f"https://{config.LSD_DD_ENDPOINT}/v1/metrics",
265
- headers={
266
- "dd-api-key": config.LSD_DD_API_KEY,
267
- "dd-otel-metric-config": DD_OTEL_METRIC_CONFIG,
268
- },
269
- preferred_temporality={
270
- Counter: AggregationTemporality.DELTA,
271
- Histogram: AggregationTemporality.DELTA,
272
- },
273
- )
274
- # Burn after reading: remove DD keys from env so user code
275
- # and child processes cannot access them.
276
- for key in (
277
- "LSD_DD_API_KEY",
278
- "LSD_DD_ENDPOINT",
279
- ):
280
- os.environ.pop(key, None)
281
-
282
- reader = PeriodicExportingMetricReader(
283
- _FilteringExporter(base_exporter),
284
- export_interval_millis=10_000,
285
- )
279
+
280
+ readers: list[Any] = []
281
+
282
+ if config.DATADOG_METRICS_ENABLED:
283
+ base_exporter = OTLPMetricExporter(
284
+ endpoint=f"https://{config.LSD_DD_ENDPOINT}/v1/metrics",
285
+ headers={
286
+ "dd-api-key": config.LSD_DD_API_KEY,
287
+ "dd-otel-metric-config": DD_OTEL_METRIC_CONFIG,
288
+ },
289
+ preferred_temporality={
290
+ Counter: AggregationTemporality.DELTA,
291
+ Histogram: AggregationTemporality.DELTA,
292
+ },
293
+ )
294
+ # Burn after reading: remove DD keys from env so user code
295
+ # and child processes cannot access them.
296
+ for key in (
297
+ "LSD_DD_API_KEY",
298
+ "LSD_DD_ENDPOINT",
299
+ ):
300
+ os.environ.pop(key, None)
301
+
302
+ readers.append(
303
+ PeriodicExportingMetricReader(
304
+ _FilteringExporter(base_exporter),
305
+ export_interval_millis=10_000,
306
+ )
307
+ )
308
+
309
+ if config.LSD_PROM_METRICS_ENABLED:
310
+ if not PROMETHEUS_EXPORTER_AVAILABLE:
311
+ logger.warning(
312
+ "Prometheus metrics disabled: opentelemetry-exporter-prometheus not installed"
313
+ )
314
+ else:
315
+ # PrometheusMetricReader registers its collector with the
316
+ # global prometheus_client REGISTRY, which start_http_server
317
+ # serves by default. MeterProvider.shutdown() unregisters it.
318
+ readers.append(PrometheusMetricReader())
319
+ self._prom_enabled = True
320
+
321
+ if not readers:
322
+ logger.info(
323
+ "OTel metrics reporter disabled (no backend configured)"
324
+ )
325
+ return
326
+
286
327
  self._meter_provider = MeterProvider(
287
- resource=resource, metric_readers=[reader]
328
+ resource=resource, metric_readers=readers
288
329
  )
289
330
  self._meter = self._meter_provider.get_meter(SERVICE_NAME)
290
331
  self._enabled = True
332
+
333
+ if config.DATADOG_METRICS_ENABLED:
334
+ logger.info(
335
+ "Datadog OTLP metrics reader initialized",
336
+ endpoint=f"https://{config.LSD_DD_ENDPOINT}/v1/metrics",
337
+ )
338
+ if self._prom_enabled:
339
+ self._start_prometheus_server()
340
+
291
341
  logger.info(
292
- "Initialized Datadog metrics reporter",
293
- endpoint=f"https://{config.LSD_DD_ENDPOINT}/v1/metrics",
342
+ "OTel metrics reporter initialized",
294
343
  metric_prefix=METRIC_NAME_PREFIX,
295
344
  max_emitting_tier=self._max_tier,
345
+ backends=[
346
+ b
347
+ for b in (
348
+ "datadog" if config.DATADOG_METRICS_ENABLED else None,
349
+ "prometheus" if self._prom_enabled else None,
350
+ )
351
+ if b
352
+ ],
296
353
  )
297
- logger.info("Datadog metrics reporter initialized")
298
354
  except Exception:
299
355
  self._enabled = False
300
356
  self._meter_provider = None
301
357
  self._meter = None
302
- logger.exception("Failed to initialize Datadog metrics reporter")
358
+ logger.exception("Failed to initialize OTel metrics reporter")
303
359
  raise
304
360
 
361
+ def _start_prometheus_server(self) -> None:
362
+ port = config.LSD_PROM_METRICS_PORT
363
+ # ``start_http_server`` spins up a WSGI server in a daemon thread serving
364
+ # the global prometheus_client REGISTRY, and returns the (server, thread)
365
+ # handle. Keep the server so ``shutdown`` can stop it cleanly (e.g. in
366
+ # tests); in production the daemon thread exits with the process anyway.
367
+ server, _thread = start_http_server(port=port)
368
+ self._prom_server = server
369
+ logger.info("Prometheus metrics scrape server started", port=port)
370
+
305
371
  def shutdown(self) -> None:
306
372
  with self._lock:
307
373
  if self._meter_provider:
308
374
  try:
309
375
  self._meter_provider.shutdown()
310
376
  except Exception:
311
- logger.exception("Failed to shutdown Datadog metrics reporter")
377
+ logger.exception("Failed to shutdown OTel metrics reporter")
312
378
  finally:
313
379
  self._meter_provider = None
314
380
  self._meter = None
381
+ if self._prom_server is not None:
382
+ try:
383
+ self._prom_server.shutdown()
384
+ self._prom_server.server_close()
385
+ except Exception:
386
+ logger.exception("Failed to stop Prometheus scrape server")
387
+ finally:
388
+ self._prom_server = None
389
+ self._prom_enabled = False
315
390
  self._enabled = False
316
391
  self._initialized = False
317
392
  self._instruments.clear()
@@ -352,7 +427,7 @@ class DatadogMetricsReporter:
352
427
  try:
353
428
  instrument.add(value, attributes or {})
354
429
  except Exception:
355
- logger.warning("Failed to add Datadog counter", metric_name=metric.name)
430
+ logger.warning("Failed to add counter", metric_name=metric.name)
356
431
 
357
432
  def record_histogram(
358
433
  self,
@@ -368,9 +443,7 @@ class DatadogMetricsReporter:
368
443
  try:
369
444
  instrument.record(value, attributes or {})
370
445
  except Exception:
371
- logger.warning(
372
- "Failed to record Datadog histogram", metric_name=metric.name
373
- )
446
+ logger.warning("Failed to record histogram", metric_name=metric.name)
374
447
 
375
448
  def record_latency(
376
449
  self,
@@ -391,7 +464,7 @@ class DatadogMetricsReporter:
391
464
  try:
392
465
  instrument.record(value, attributes or {})
393
466
  except Exception:
394
- logger.warning("Failed to record Datadog latency", metric_name=metric.name)
467
+ logger.warning("Failed to record latency", metric_name=metric.name)
395
468
 
396
469
  def record_gauge(
397
470
  self,
@@ -407,7 +480,7 @@ class DatadogMetricsReporter:
407
480
  try:
408
481
  instrument.set(value, attributes or {})
409
482
  except Exception:
410
- logger.warning("Failed to record Datadog gauge", metric_name=metric.name)
483
+ logger.warning("Failed to record gauge", metric_name=metric.name)
411
484
 
412
485
  @contextmanager
413
486
  def track_latency_ms(
@@ -429,11 +502,11 @@ class DatadogMetricsReporter:
429
502
  )
430
503
 
431
504
 
432
- _metrics_reporter: DatadogMetricsReporter | None = None
505
+ _metrics_reporter: OTelMetricsReporter | None = None
433
506
 
434
507
 
435
- def get_datadog_metrics_reporter() -> DatadogMetricsReporter:
508
+ def get_otlp_metrics_reporter() -> OTelMetricsReporter:
436
509
  global _metrics_reporter
437
510
  if _metrics_reporter is None:
438
- _metrics_reporter = DatadogMetricsReporter()
511
+ _metrics_reporter = OTelMetricsReporter()
439
512
  return _metrics_reporter
langgraph_api/stream.py CHANGED
@@ -44,12 +44,12 @@ from langgraph_api.graph import get_graph
44
44
  from langgraph_api.grpc.ops.runs import StreamPublishException
45
45
  from langgraph_api.js.base import BaseRemotePregel
46
46
  from langgraph_api.metadata import HOST, PLAN, USER_API_URL, incr_nodes
47
- from langgraph_api.metrics_datadog import (
47
+ from langgraph_api.metrics_otlp import (
48
48
  COUNTER_STREAMING_DATA_LOSS,
49
49
  GAUGE_PUBLISH_QUEUE_AVAILABILITY,
50
50
  HISTOGRAM_STREAM_DATA_SIZE,
51
51
  LATENCY_STREAM_PUBLISH,
52
- get_datadog_metrics_reporter,
52
+ get_otlp_metrics_reporter,
53
53
  )
54
54
  from langgraph_api.schema import Run, StreamMode
55
55
  from langgraph_api.serde import json_dumpb
@@ -569,7 +569,7 @@ async def consume(
569
569
  *,
570
570
  thread_id: str | uuid.UUID,
571
571
  ) -> None:
572
- reporter = get_datadog_metrics_reporter()
572
+ reporter = get_otlp_metrics_reporter()
573
573
  stream_modes = stream_modes or set()
574
574
  if "messages-tuple" in stream_modes:
575
575
  stream_modes.add("messages")
langgraph_api/worker.py CHANGED
@@ -29,7 +29,7 @@ from langgraph_api.feature_flags import IS_POSTGRES_OR_GRPC_BACKEND
29
29
  from langgraph_api.graph import restore_dd_trace_context
30
30
  from langgraph_api.js.errors import RemoteException
31
31
  from langgraph_api.metadata import incr_runs
32
- from langgraph_api.metrics_datadog import (
32
+ from langgraph_api.metrics_otlp import (
33
33
  COUNTER_GRAPH_RECURSION_LIMIT_ERROR,
34
34
  COUNTER_RUN_ATTEMPT_STARTED,
35
35
  COUNTER_RUN_CANCELED_BY_REQUEST,
@@ -39,7 +39,7 @@ from langgraph_api.metrics_datadog import (
39
39
  COUNTER_RUN_SET_STATUS_ERROR,
40
40
  COUNTER_RUN_SUCCESS,
41
41
  LATENCY_RUN_EXECUTION,
42
- get_datadog_metrics_reporter,
42
+ get_otlp_metrics_reporter,
43
43
  )
44
44
  from langgraph_api.otel_context import restore_otel_trace_context
45
45
  from langgraph_api.schema import RUN_KWARGS_ENCRYPTION_SUBFIELDS, Run, StreamMode
@@ -114,7 +114,7 @@ async def worker(
114
114
  *,
115
115
  encryption_context: dict[str, Any] | None = None,
116
116
  ) -> WorkerResult:
117
- reporter = get_datadog_metrics_reporter()
117
+ reporter = get_otlp_metrics_reporter()
118
118
  run_id = run["run_id"]
119
119
  if attempt == 1:
120
120
  incr_runs()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.11.0.dev1
3
+ Version: 0.11.0.dev3
4
4
  Author-email: Will Fu-Hinthorn <will@langchain.dev>, Josh Rogers <josh@langchain.dev>, Parker Rule <parker@langchain.dev>
5
5
  License: Elastic-2.0
6
6
  License-File: LICENSE
@@ -22,8 +22,10 @@ Requires-Dist: langgraph<2,>=0.4.10
22
22
  Requires-Dist: langsmith[otel]>=0.6.3
23
23
  Requires-Dist: opentelemetry-api>=0.0.1
24
24
  Requires-Dist: opentelemetry-exporter-otlp-proto-http>=0.0.1
25
+ Requires-Dist: opentelemetry-exporter-prometheus>=0.62b1
25
26
  Requires-Dist: opentelemetry-sdk>=0.0.1
26
27
  Requires-Dist: orjson>=3.9.7
28
+ Requires-Dist: prometheus-client>=0.0.1
27
29
  Requires-Dist: protobuf<7.0.0,>=6.32.1
28
30
  Requires-Dist: pyjwt>=2.9.0
29
31
  Requires-Dist: sse-starlette<3.4.0,>=2.1.3
@@ -1,4 +1,4 @@
1
- langgraph_api/__init__.py,sha256=7hq_DSL9yS4MXagGTNcpKw8sxQuDWske21Zzl7qXyTg,28
1
+ langgraph_api/__init__.py,sha256=X81WmZEC-zvkRlfUwCk6eIGZp8_MYx5u7jr4wOYlhx0,28
2
2
  langgraph_api/_factory_utils.py,sha256=5JsiJbg_YocVSryN2jwoZTg03-eyymlWMK6sKCmXwz0,5756
3
3
  langgraph_api/asgi_transport.py,sha256=XApY3lIWBZTMbbsl8dDJzl0cLGirmAGE0SifqZUnXvs,11896
4
4
  langgraph_api/asyncio.py,sha256=c-YE-14N7_AP1GzifsbP14XnhLsmxT2P916KXruerpI,10573
@@ -14,7 +14,7 @@ langgraph_api/http_metrics.py,sha256=etxbZNmYxdb58DVLNkHP7S-N6njXPTiQh2OWKMaIZi8
14
14
  langgraph_api/http_metrics_utils.py,sha256=sjxF7SYGTzY0Wz_G0dzatsYNnWr31S6ujej4JmBG2yo,866
15
15
  langgraph_api/logging.py,sha256=V1RCnqVLuMvJtrBiyMMLfaEdbS3k5A2M8Unhr4FUUdQ,6801
16
16
  langgraph_api/metadata.py,sha256=ih2et_R0prFsCzikQ4_L0j9up7t0rObAMVKyEk7ienI,9778
17
- langgraph_api/metrics_datadog.py,sha256=mdSyKVibCsW5I7dJUDSowE_CUS-anTOCR8GLJWNkEaY,15933
17
+ langgraph_api/metrics_otlp.py,sha256=TxK96ks8fok_g0phk24QDvLcXm-Mh9TbVThoiyTJv6Y,18925
18
18
  langgraph_api/otel_context.py,sha256=DWFwW4Yu88QY4W2J0IRcURR450Th9J2DupvDDkSkMBA,7166
19
19
  langgraph_api/patch.py,sha256=ViUknYvyQWS6y0f5XuaEoci2qB_mQv8vZl-oaUxsI6M,1448
20
20
  langgraph_api/queue_entrypoint.py,sha256=JitIsrnJXnfAke2qwsvlvMKwvna9GMMm55wBYoMtJFM,12166
@@ -28,12 +28,12 @@ langgraph_api/server.py,sha256=1eAZPim0Pkgh5oGS4EvW-_7Zh_82iGOZtR1rpX08FoA,11216
28
28
  langgraph_api/sse.py,sha256=cChZ7raQUHp8p5BreE_5wMBR8lFO0n7746sV8_HQOrc,4822
29
29
  langgraph_api/state.py,sha256=A6jx2OpcVmiFNBafjZ2tX1x6s_AhBk5EW2drd-vaqIc,4396
30
30
  langgraph_api/store.py,sha256=i-jVfWzDEmPESVofh1tNWbo0HMLiLz_BSKKV4QjN-dE,5027
31
- langgraph_api/stream.py,sha256=W9lrfDWXmCRDLyF_7s2846DNG_b9_-ijoHEUmW-x990,30346
31
+ langgraph_api/stream.py,sha256=pShliboqysagNt251kP2erE2qMszWwN7pKQn6WYJ7Vg,30337
32
32
  langgraph_api/stream_v2.py,sha256=gW98dq9HKsCJ2NxmXzsYGcqBwFH2bSgmoFVNN3aVPOs,9897
33
33
  langgraph_api/traceblock.py,sha256=GhgAtLhAQ8Z8LHtRQq3par-rfPpRBQp2Q7WBACJq1NI,677
34
34
  langgraph_api/validation.py,sha256=XyeKyt7jAICmIlT_b0J0mv2YbwIbNoe4m6zEmfk9gOA,14657
35
35
  langgraph_api/webhook.py,sha256=qXEtkE6orek2POeOQmPRsEarJgXIYp-LBrZB-OwITxc,9572
36
- langgraph_api/worker.py,sha256=gixTe6SLYqSEARri_Lbii6cT69dMM0iwDC7YKgYgx5E,21160
36
+ langgraph_api/worker.py,sha256=HGirbQ1i1hxaayORoihsQ6JMVAq3VsrC8CUxAHwY9t0,21151
37
37
  langgraph_api/_checkpointer/__init__.py,sha256=ofJTJLGy7Hsuzhj-2dpfDvrDloM0BzlhTzvZOdR9K8U,2223
38
38
  langgraph_api/_checkpointer/_adapter.py,sha256=1Mdb3B_bg6EQ_3uJfk6ImiobIiAPdaMQVaruDBzVkE8,20833
39
39
  langgraph_api/_checkpointer/protocol.py,sha256=udgYKMNtKWG_eLDwYkHXV3b2bZLZg8Rsfm3fjkhU-rU,3635
@@ -63,7 +63,7 @@ langgraph_api/auth/studio_user.py,sha256=gNCicIo6cYaHmFj2sEdsvDYkKW7NWfGXGS2tTAM
63
63
  langgraph_api/auth/langsmith/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
64
64
  langgraph_api/auth/langsmith/backend.py,sha256=Y6-VxD7zfV1jzGdjmQ66CgNa3SenLbo3d_375CcKZ9U,3770
65
65
  langgraph_api/auth/langsmith/client.py,sha256=79kwCVeHU64nsHsxWipfZhf44lM6vfs2nlfTxlJF6LU,4142
66
- langgraph_api/config/__init__.py,sha256=hGqZ3_B4wPm3ZuH5wrDFHHBmtOH_qYnFvX9ChmsBNZ8,25159
66
+ langgraph_api/config/__init__.py,sha256=UxYO82Qgwu8_VqUAiXDaTgIjs5dn5yaJSFnLQDHIl0Y,25382
67
67
  langgraph_api/config/_parse.py,sha256=VXQPKzqtIsZrRy-nUEBMDESBxXzqFRQNiqsvAZeX3HU,3921
68
68
  langgraph_api/config/schemas.py,sha256=rYqu67fZxmtCOU-Zc1s3265KbRbqK8PmfvfwvrAmd-Q,20863
69
69
  langgraph_api/encryption/__init__.py,sha256=gaCZ00CocSbqSqrDn6XJHaSp2CZCnC8qnrD9G4fbzyI,363
@@ -78,7 +78,7 @@ langgraph_api/event_streaming/constants.py,sha256=eGsm-NvOlqV3gNxDO5vlr00FdngmgE
78
78
  langgraph_api/event_streaming/event_normalizers.py,sha256=5bVSqGPW-Uh7WX91qgTfwpK433pCSv_wchpbzW8TLi4,2794
79
79
  langgraph_api/event_streaming/namespace.py,sha256=aJDFt45Or2_bQdRpKJgdFhBgTDj6PYl7Coz5GzfbM84,1509
80
80
  langgraph_api/event_streaming/service.py,sha256=nRyVnVggu9GwKDNWAN2XF56HDVEBn-l_rwDLkqa4SYk,49250
81
- langgraph_api/event_streaming/session.py,sha256=uBVhHMPGiCLliOLDBAiLRf6w2yDgFnKU4vND4IKAwS8,73749
81
+ langgraph_api/event_streaming/session.py,sha256=_Cw04mCeyPPmBGn8868jg-wlJmL_9BwLCS8N3DbNr1U,73731
82
82
  langgraph_api/event_streaming/state_normalizers.py,sha256=fEjb9AWihhZeqkGOlTBYmph06XAP3AvyAkNmNdquqAU,13113
83
83
  langgraph_api/event_streaming/types.py,sha256=RyZqfqgH-jmmmmAFQj5f6nH9M1rGK93zVG7nlmvqZgc,3647
84
84
  langgraph_api/grpc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -228,8 +228,8 @@ langgraph_grpc_common/proto/errors_pb2.py,sha256=JI6x-vBK1AE7DHZ5DQwN1mZWF6C4xTR
228
228
  langgraph_grpc_common/proto/errors_pb2.pyi,sha256=rd3-BYUH8V-aO66taL7OOblaLgdrDtf1Vcd38GUoVVM,2181
229
229
  langgraph_grpc_common/proto/errors_pb2_grpc.py,sha256=2-LwQ0OPGo-NtC0269q7Fw6GPBxnTLYWq3xP5Eq0_YA,886
230
230
  langgraph_grpc_common/proto/errors_pb2_grpc.pyi,sha256=uC9Wnq6uyg488QiONpJ0ba1s_iouQCOYsjd_FDd1XUM,495
231
- langgraph_api-0.11.0.dev1.dist-info/METADATA,sha256=EE7rDCh48Z2-ZwcmI_JCyDwNqDDUvBxMSHn-wMSNjZg,4527
232
- langgraph_api-0.11.0.dev1.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
233
- langgraph_api-0.11.0.dev1.dist-info/entry_points.txt,sha256=hGedv8n7cgi41PypMfinwS_HfCwA7xJIfS0jAp8htV8,78
234
- langgraph_api-0.11.0.dev1.dist-info/licenses/LICENSE,sha256=ZPwVR73Biwm3sK6vR54djCrhaRiM4cAD2zvOQZV8Xis,3859
235
- langgraph_api-0.11.0.dev1.dist-info/RECORD,,
231
+ langgraph_api-0.11.0.dev3.dist-info/METADATA,sha256=RiYqjLCjhrUtbzzlxaQq_PZ86Me_4-P5hxsEo2y-o-A,4624
232
+ langgraph_api-0.11.0.dev3.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
233
+ langgraph_api-0.11.0.dev3.dist-info/entry_points.txt,sha256=hGedv8n7cgi41PypMfinwS_HfCwA7xJIfS0jAp8htV8,78
234
+ langgraph_api-0.11.0.dev3.dist-info/licenses/LICENSE,sha256=ZPwVR73Biwm3sK6vR54djCrhaRiM4cAD2zvOQZV8Xis,3859
235
+ langgraph_api-0.11.0.dev3.dist-info/RECORD,,