langgraph-api 0.4.36__py3-none-any.whl → 0.4.38__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.36"
1
+ __version__ = "0.4.38"
langgraph_api/api/meta.py CHANGED
@@ -24,7 +24,8 @@ async def meta_info(request: ApiRequest):
24
24
  "flags": {
25
25
  "assistants": True,
26
26
  "crons": plus and config.FF_CRONS_ENABLED,
27
- "langsmith": bool(config.LANGSMITH_API_KEY) and bool(config.TRACING),
27
+ "langsmith": bool(config.LANGSMITH_CONTROL_PLANE_API_KEY)
28
+ and bool(config.TRACING),
28
29
  "langsmith_tracing_replicas": True,
29
30
  },
30
31
  "host": {
langgraph_api/cli.py CHANGED
@@ -299,7 +299,7 @@ def run_server(
299
299
  f"Server started in {time.time() - start_time:.2f}s"
300
300
  )
301
301
  thread_logger.info(
302
- "🎨 Opening Studio in your browser..."
302
+ "🎨 Opening Debugger in your browser..."
303
303
  )
304
304
  thread_logger.info("URL: " + full_studio_url)
305
305
  webbrowser.open(full_studio_url)
@@ -317,7 +317,7 @@ def run_server(
317
317
  ╩═╝┴ ┴┘└┘└─┘╚═╝┴└─┴ ┴┴ ┴ ┴
318
318
 
319
319
  - 🚀 API: \033[36m{local_url}\033[0m
320
- - 🎨 Studio UI: \033[36m{full_studio_url}\033[0m
320
+ - 🎨 Debugger UI: \033[36m{full_studio_url}\033[0m
321
321
  - 📚 API Docs: \033[36m{local_url}/docs\033[0m
322
322
 
323
323
  This in-memory server is designed for development and testing.
langgraph_api/config.py CHANGED
@@ -334,11 +334,21 @@ LANGGRAPH_CLOUD_LICENSE_KEY = env("LANGGRAPH_CLOUD_LICENSE_KEY", cast=str, defau
334
334
  LANGSMITH_API_KEY = env(
335
335
  "LANGSMITH_API_KEY", cast=str, default=getenv("LANGCHAIN_API_KEY", "")
336
336
  )
337
+ # LANGSMITH_CONTROL_PLANE_API_KEY is used for license verification and
338
+ # submitting usage metadata to LangSmith SaaS.
339
+ #
340
+ # Use case: A self-hosted deployment can configure LANGSMITH_API_KEY
341
+ # from a self-hosted LangSmith instance (i.e. trace to self-hosted
342
+ # LangSmith) and configure LANGSMITH_CONTROL_PLANE_API_KEY from LangSmith SaaS
343
+ # to facilitate license key verification and metadata submission.
344
+ LANGSMITH_CONTROL_PLANE_API_KEY = env(
345
+ "LANGSMITH_CONTROL_PLANE_API_KEY", cast=str, default=LANGSMITH_API_KEY
346
+ )
337
347
 
338
348
  # if langsmith api key is set, enable tracing unless explicitly disabled
339
349
 
340
350
  if (
341
- LANGSMITH_API_KEY
351
+ LANGSMITH_CONTROL_PLANE_API_KEY
342
352
  and not getenv("LANGCHAIN_TRACING_V2")
343
353
  and not getenv("LANGCHAIN_TRACING")
344
354
  and not getenv("LANGSMITH_TRACING_V2")
@@ -353,9 +363,12 @@ TRACING = (
353
363
  or env("LANGSMITH_TRACING", cast=bool, default=None)
354
364
  )
355
365
 
356
- # if variant is "licensed", update to "local" if using LANGSMITH_API_KEY instead
366
+ # if variant is "licensed", update to "local" if using LANGSMITH_CONTROL_PLANE_API_KEY instead
357
367
 
358
- if getenv("LANGSMITH_LANGGRAPH_API_VARIANT") == "licensed" and LANGSMITH_API_KEY:
368
+ if (
369
+ getenv("LANGSMITH_LANGGRAPH_API_VARIANT") == "licensed"
370
+ and LANGSMITH_CONTROL_PLANE_API_KEY
371
+ ):
359
372
  environ["LANGSMITH_LANGGRAPH_API_VARIANT"] = "local"
360
373
 
361
374
 
@@ -375,15 +388,16 @@ API_VARIANT = env("LANGSMITH_LANGGRAPH_API_VARIANT", cast=str, default="")
375
388
  # UI
376
389
  UI_USE_BUNDLER = env("LANGGRAPH_UI_BUNDLER", cast=bool, default=False)
377
390
 
378
- SELF_HOSTED_METRICS_ENABLED = env(
379
- "SELF_HOSTED_METRICS_ENABLED", cast=bool, default=False
380
- )
381
- SELF_HOSTED_METRICS_ENDPOINT = env(
382
- "SELF_HOSTED_METRICS_ENDPOINT", cast=str, default=None
383
- )
384
- SELF_HOSTED_METRICS_EXPORT_INTERVAL_MS = env(
385
- "SELF_HOSTED_METRICS_EXPORT_INTERVAL_MS", cast=int, default=60000
391
+ LANGGRAPH_METRICS_ENABLED = env("LANGGRAPH_METRICS_ENABLED", cast=bool, default=False)
392
+ LANGGRAPH_METRICS_ENDPOINT = env("LANGGRAPH_METRICS_ENDPOINT", cast=str, default=None)
393
+ LANGGRAPH_METRICS_EXPORT_INTERVAL_MS = env(
394
+ "LANGGRAPH_METRICS_EXPORT_INTERVAL_MS", cast=int, default=60000
386
395
  )
396
+ LANGGRAPH_LOGS_ENDPOINT = env("LANGGRAPH_LOGS_ENDPOINT", cast=str, default=None)
397
+ LANGGRAPH_LOGS_ENABLED = env("LANGGRAPH_LOGS_ENABLED", cast=bool, default=False)
398
+
399
+ SELF_HOSTED_OBSERVABILITY_SERVICE_NAME = "LGP_Self_Hosted"
400
+
387
401
  IS_QUEUE_ENTRYPOINT = False
388
402
  IS_EXECUTOR_ENTRYPOINT = False
389
403
  ref_sha = None
langgraph_api/graph.py CHANGED
@@ -362,7 +362,7 @@ async def collect_graphs_from_env(register: bool = False) -> None:
362
362
  if lg_api_config.API_VARIANT == "local_dev":
363
363
  raise NotImplementedError(
364
364
  "LangGraph.JS graphs are not yet supported in local development mode. "
365
- "To run your JS graphs, either use the LangGraph Studio application "
365
+ "To run your JS graphs, either use the LangSmith Debugger "
366
366
  "or run `langgraph up` to start the server in a Docker container."
367
367
  )
368
368
  import sys
@@ -70,7 +70,7 @@ class HTTPMetricsCollector:
70
70
  hist_data["count"] += 1
71
71
 
72
72
  try:
73
- if config.SELF_HOSTED_METRICS_ENABLED:
73
+ if config.LANGGRAPH_METRICS_ENABLED:
74
74
  from langgraph_api.self_hosted_metrics import record_http_request
75
75
 
76
76
  record_http_request(method, route_path, status, latency_seconds)
langgraph_api/logging.py CHANGED
@@ -120,6 +120,30 @@ class JSONRenderer:
120
120
  return json_dumpb(event_dict).decode()
121
121
 
122
122
 
123
+ # same as Formatter, but always uses JSONRenderer. Used by OTLP log handler for self hosted logging
124
+ class OTLPFormatter(structlog.stdlib.ProcessorFormatter):
125
+ def __init__(self, *args, **kwargs) -> None:
126
+ if len(args) == 3:
127
+ fmt, datefmt, style = args
128
+ kwargs["fmt"] = fmt
129
+ kwargs["datefmt"] = datefmt
130
+ kwargs["style"] = style
131
+ else:
132
+ raise RuntimeError(
133
+ f"OTLPFormatter expected 3 positional arguments (fmt, datefmt, style), "
134
+ f"but got {len(args)} arguments."
135
+ )
136
+ super().__init__(
137
+ processors=[
138
+ structlog.stdlib.ProcessorFormatter.remove_processors_meta,
139
+ AddLoggingContext(),
140
+ JSONRenderer(),
141
+ ],
142
+ foreign_pre_chain=shared_processors,
143
+ **kwargs,
144
+ )
145
+
146
+
123
147
  LEVELS = logging.getLevelNamesMapping()
124
148
 
125
149
 
langgraph_api/metadata.py CHANGED
@@ -11,8 +11,8 @@ import langgraph_api.config as config
11
11
  from langgraph_api.auth.custom import get_auth_instance
12
12
  from langgraph_api.config import (
13
13
  LANGGRAPH_CLOUD_LICENSE_KEY,
14
- LANGSMITH_API_KEY,
15
14
  LANGSMITH_AUTH_ENDPOINT,
15
+ LANGSMITH_CONTROL_PLANE_API_KEY,
16
16
  USES_CUSTOM_APP,
17
17
  USES_CUSTOM_AUTH,
18
18
  USES_INDEXING,
@@ -121,13 +121,13 @@ async def metadata_loop() -> None:
121
121
  from langgraph_api import __version__
122
122
  except ImportError:
123
123
  __version__ = None
124
- if not LANGGRAPH_CLOUD_LICENSE_KEY and not LANGSMITH_API_KEY:
124
+ if not LANGGRAPH_CLOUD_LICENSE_KEY and not LANGSMITH_CONTROL_PLANE_API_KEY:
125
125
  return
126
126
 
127
127
  if (
128
128
  LANGGRAPH_CLOUD_LICENSE_KEY
129
129
  and not LANGGRAPH_CLOUD_LICENSE_KEY.startswith("lcl_")
130
- and not LANGSMITH_API_KEY
130
+ and not LANGSMITH_CONTROL_PLANE_API_KEY
131
131
  ):
132
132
  logger.info("Running in air-gapped mode, skipping metadata loop")
133
133
  return
@@ -204,10 +204,10 @@ async def metadata_loop() -> None:
204
204
  )
205
205
 
206
206
  # 2. Send to langchain auth endpoint if API key is set
207
- if LANGSMITH_API_KEY and LANGCHAIN_METADATA_ENDPOINT:
207
+ if LANGSMITH_CONTROL_PLANE_API_KEY and LANGCHAIN_METADATA_ENDPOINT:
208
208
  langchain_payload = {
209
209
  **base_payload,
210
- "api_key": LANGSMITH_API_KEY,
210
+ "api_key": LANGSMITH_CONTROL_PLANE_API_KEY,
211
211
  }
212
212
  submissions_attempted.append("langchain")
213
213
  try:
@@ -0,0 +1,124 @@
1
+ import logging
2
+ import os
3
+ from typing import cast
4
+
5
+ import structlog
6
+ from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter
7
+ from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler
8
+ from opentelemetry.sdk._logs.export import BatchLogRecordProcessor
9
+ from opentelemetry.sdk.resources import SERVICE_NAME, Resource
10
+ from opentelemetry.util.types import Attributes
11
+
12
+ from langgraph_api import config
13
+ from langgraph_api.logging import OTLPFormatter
14
+
15
+ logger = structlog.stdlib.get_logger(__name__)
16
+
17
+ _logger_provider = None
18
+ _customer_attributes = {}
19
+
20
+
21
+ # see https://github.com/open-telemetry/opentelemetry-python/issues/3649 for why we need this
22
+ class AttrFilteredLoggingHandler(LoggingHandler):
23
+ DROP_ATTRIBUTES = ["_logger"]
24
+
25
+ @staticmethod
26
+ def _get_attributes(record: logging.LogRecord) -> Attributes:
27
+ base_attributes = LoggingHandler._get_attributes(record)
28
+ attributes = {
29
+ k: v
30
+ for k, v in base_attributes.items()
31
+ if k not in AttrFilteredLoggingHandler.DROP_ATTRIBUTES
32
+ }
33
+ if _customer_attributes:
34
+ attributes.update(_customer_attributes)
35
+ return cast(Attributes, attributes)
36
+
37
+
38
+ def initialize_self_hosted_logs() -> None:
39
+ global _logger_provider
40
+
41
+ if not config.LANGGRAPH_LOGS_ENABLED:
42
+ return
43
+
44
+ if not config.LANGGRAPH_LOGS_ENDPOINT:
45
+ raise RuntimeError(
46
+ "LANGGRAPH_LOGS_ENABLED is true but no LANGGRAPH_LOGS_ENDPOINT is configured"
47
+ )
48
+
49
+ # For now, this is only enabled for fully self-hosted customers
50
+ # We will need to update the otel collector auth model to support hybrid customers
51
+ if not config.LANGGRAPH_CLOUD_LICENSE_KEY:
52
+ logger.warning(
53
+ "Self-hosted logs require a license key, and do not work with hybrid deployments yet."
54
+ )
55
+ return
56
+
57
+ try:
58
+ resource_attributes = {
59
+ SERVICE_NAME: config.SELF_HOSTED_OBSERVABILITY_SERVICE_NAME,
60
+ }
61
+
62
+ if config.LANGGRAPH_CLOUD_LICENSE_KEY:
63
+ try:
64
+ from langgraph_license.validation import (
65
+ CUSTOMER_ID, # type: ignore[unresolved-import]
66
+ CUSTOMER_NAME, # type: ignore[unresolved-import]
67
+ )
68
+
69
+ if CUSTOMER_ID:
70
+ _customer_attributes["customer_id"] = CUSTOMER_ID
71
+ if CUSTOMER_NAME:
72
+ _customer_attributes["customer_name"] = CUSTOMER_NAME
73
+
74
+ # resolves to pod name in k8s, or container id in docker
75
+ instance_id = os.environ.get("HOSTNAME")
76
+ if instance_id:
77
+ _customer_attributes["instance_id"] = instance_id
78
+ except ImportError:
79
+ pass
80
+ except Exception as e:
81
+ logger.warning("Failed to get customer info from license", exc_info=e)
82
+
83
+ if config.IS_QUEUE_ENTRYPOINT:
84
+ _customer_attributes["entrypoint"] = "queue"
85
+ elif config.IS_EXECUTOR_ENTRYPOINT:
86
+ _customer_attributes["entrypoint"] = "executor"
87
+ else:
88
+ _customer_attributes["entrypoint"] = "api"
89
+
90
+ _logger_provider = LoggerProvider(
91
+ resource=Resource.create(resource_attributes),
92
+ )
93
+ _logger_provider.add_log_record_processor(
94
+ BatchLogRecordProcessor(
95
+ OTLPLogExporter(
96
+ endpoint=config.LANGGRAPH_LOGS_ENDPOINT,
97
+ headers={
98
+ "X-Langchain-License-Key": config.LANGGRAPH_CLOUD_LICENSE_KEY,
99
+ },
100
+ )
101
+ )
102
+ )
103
+ handler = AttrFilteredLoggingHandler(logger_provider=_logger_provider)
104
+ handler.setFormatter(OTLPFormatter("%(message)s", None, "%"))
105
+ logging.getLogger().addHandler(handler)
106
+
107
+ logger.info(
108
+ "Self-hosted logs initialized successfully",
109
+ endpoint=config.LANGGRAPH_LOGS_ENDPOINT,
110
+ )
111
+ except Exception as e:
112
+ logger.exception("Failed to initialize self-hosted logs", exc_info=e)
113
+
114
+
115
+ def shutdown_self_hosted_logs() -> None:
116
+ global _logger_provider
117
+
118
+ if _logger_provider:
119
+ try:
120
+ logger.info("Shutting down self-hosted logs")
121
+ _logger_provider.shutdown()
122
+ _logger_provider = None
123
+ except Exception as e:
124
+ logger.exception("Failed to shutdown self-hosted logs", exc_info=e)
@@ -8,7 +8,7 @@ from opentelemetry.exporter.otlp.proto.http.metric_exporter import (
8
8
  from opentelemetry.metrics import CallbackOptions, Observation
9
9
  from opentelemetry.sdk.metrics import MeterProvider
10
10
  from opentelemetry.sdk.metrics.export import PeriodicExportingMetricReader
11
- from opentelemetry.sdk.resources import Resource
11
+ from opentelemetry.sdk.resources import SERVICE_NAME, Resource
12
12
 
13
13
  from langgraph_api import asyncio as lg_asyncio
14
14
  from langgraph_api import config, metadata
@@ -33,12 +33,12 @@ def initialize_self_hosted_metrics():
33
33
  _http_latency_histogram, \
34
34
  _customer_attributes
35
35
 
36
- if not config.SELF_HOSTED_METRICS_ENABLED:
36
+ if not config.LANGGRAPH_METRICS_ENABLED:
37
37
  return
38
38
 
39
- if not config.SELF_HOSTED_METRICS_ENDPOINT:
39
+ if not config.LANGGRAPH_METRICS_ENDPOINT:
40
40
  raise RuntimeError(
41
- "SELF_HOSTED_METRICS_ENABLED is true but no SELF_HOSTED_METRICS_ENDPOINT is configured"
41
+ "LANGGRAPH_METRICS_ENABLED is true but no LANGGRAPH_METRICS_ENDPOINT is configured"
42
42
  )
43
43
 
44
44
  # for now, this is only enabled for fully self-hosted customers
@@ -51,18 +51,18 @@ def initialize_self_hosted_metrics():
51
51
 
52
52
  try:
53
53
  exporter = OTLPMetricExporter(
54
- endpoint=config.SELF_HOSTED_METRICS_ENDPOINT,
54
+ endpoint=config.LANGGRAPH_METRICS_ENDPOINT,
55
55
  headers={"X-Langchain-License-Key": config.LANGGRAPH_CLOUD_LICENSE_KEY},
56
56
  )
57
57
 
58
58
  # this will periodically export metrics to our beacon lgp otel collector in a separate thread
59
59
  metric_reader = PeriodicExportingMetricReader(
60
60
  exporter=exporter,
61
- export_interval_millis=config.SELF_HOSTED_METRICS_EXPORT_INTERVAL_MS,
61
+ export_interval_millis=config.LANGGRAPH_METRICS_EXPORT_INTERVAL_MS,
62
62
  )
63
63
 
64
64
  resource_attributes = {
65
- "service.name": "LGP_Self_Hosted",
65
+ SERVICE_NAME: config.SELF_HOSTED_OBSERVABILITY_SERVICE_NAME,
66
66
  }
67
67
 
68
68
  resource = Resource.create(resource_attributes)
@@ -191,8 +191,8 @@ def initialize_self_hosted_metrics():
191
191
 
192
192
  logger.info(
193
193
  "Self-hosted metrics initialized successfully",
194
- endpoint=config.SELF_HOSTED_METRICS_ENDPOINT,
195
- export_interval_ms=config.SELF_HOSTED_METRICS_EXPORT_INTERVAL_MS,
194
+ endpoint=config.LANGGRAPH_METRICS_ENDPOINT,
195
+ export_interval_ms=config.LANGGRAPH_METRICS_EXPORT_INTERVAL_MS,
196
196
  )
197
197
 
198
198
  except Exception as e:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.4.36
3
+ Version: 0.4.38
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,24 +1,25 @@
1
- langgraph_api/__init__.py,sha256=h8aRxmAAKfL5Jkrm7_IsujcDDHiKRo8DdMgCBl8-aWg,23
1
+ langgraph_api/__init__.py,sha256=kN_RGJ1Pzvcv9wq2zj9HbmpyLiPovJLEP8YoMvBXK9c,23
2
2
  langgraph_api/asgi_transport.py,sha256=XtiLOu4WWsd-xizagBLzT5xUkxc9ZG9YqwvETBPjBFE,5161
3
3
  langgraph_api/asyncio.py,sha256=FEEkLm_N-15cbElo4vQ309MkDKBZuRqAYV8VJ1DocNw,9860
4
- langgraph_api/cli.py,sha256=o_zD2vkky06dzW87HQgkIR1_h3ZCSZ8tgNvFCK9rKVo,19669
4
+ langgraph_api/cli.py,sha256=sUMGhUC4TkN986iqzWWbvbI3JL2PwvrFTNAsFnOdH3c,19673
5
5
  langgraph_api/command.py,sha256=Bh-rvuTLwdHCqFWryCjB1M8oWxPBwRBUjMNj_04KPxM,852
6
- langgraph_api/config.py,sha256=AMcVZn8_uWjyfFEnYw6o8S7HQhwcWpAgkGu7m-gpdsY,12481
6
+ langgraph_api/config.py,sha256=gO25XRPc19Room51P3FewE54pSFvfwuVDtvyjkDSzEs,13251
7
7
  langgraph_api/cron_scheduler.py,sha256=25wYzEQrhPEivZrAPYOmzLPDOQa-aFogU37mTXc9TJk,2566
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=YDNncFFnjOjX_ylHDVY3Z4Ehj62zyHFJPaiRCkLAZus,25285
11
+ langgraph_api/graph.py,sha256=Gmg_34sPTLcztpkhHJNT26eiRq4RjJAANOX5FLVZjPY,25275
12
12
  langgraph_api/http.py,sha256=fyK-H-0UfNy_BzuVW3aWWGvhRavmGAVMkDwDArryJ_4,5659
13
- langgraph_api/http_metrics.py,sha256=iOJKQW8VdgkhWp5aBjy1RUghH5noxJTVFPEmmXwgCbE,5097
13
+ langgraph_api/http_metrics.py,sha256=vw3UT9uj9qgxQ_DwJq77HGZqh6LHSjyxylWhqkf2jAw,5095
14
14
  langgraph_api/http_metrics_utils.py,sha256=sjxF7SYGTzY0Wz_G0dzatsYNnWr31S6ujej4JmBG2yo,866
15
- langgraph_api/logging.py,sha256=qB6q_cUba31edE4_D6dBGhdiUTpW7sXAOepUjYb_R50,5216
16
- langgraph_api/metadata.py,sha256=0eGYhXOW6UIVDj2Y5mOdSJz_RadgJG8xmUsC9WqwsiE,8342
15
+ langgraph_api/logging.py,sha256=o5iVARqtFYKIcRrK2nk1ymcKEiVYKd_dHmhXLF2khFI,6090
16
+ langgraph_api/metadata.py,sha256=Z54bd-uf51qo3KR7_jxETbalp6vD9mWGe-UBeMw1AP4,8412
17
17
  langgraph_api/patch.py,sha256=J0MmcfpZG15SUVaVcI0Z4x_c0-0rbbT7Pwh9fDAQOpA,1566
18
18
  langgraph_api/queue_entrypoint.py,sha256=z3ZUBl3CpnMm0KFPqCuGvSohPAmYQbhAdyRizSJSClM,8481
19
19
  langgraph_api/route.py,sha256=EBhELuJ1He-ZYcAnR5YTImcIeDtWthDae5CHELBxPkM,5056
20
20
  langgraph_api/schema.py,sha256=spZ_XPT4AMJfw2YatsdnMZZLzgB9Sm3YR8n0SlgGdJ8,8480
21
- langgraph_api/self_hosted_metrics.py,sha256=JyDGs7lTKndL_vdtGq4rbPtOGdxCkil9_u6d_wTJeds,13980
21
+ langgraph_api/self_hosted_logs.py,sha256=9ljOz3KH3O1SwsD7eTKnreyJ80NbeR7nj7SuxBlrmCc,4422
22
+ langgraph_api/self_hosted_metrics.py,sha256=3FFezxjU0Vs-bsH39f4Dcwn7fporTLHV9REQ3UQ315A,14004
22
23
  langgraph_api/serde.py,sha256=Jkww6ixP5o2YZmnXtM7ihuAYC6YSuNDNPvE-8ILoqVo,5499
23
24
  langgraph_api/server.py,sha256=NNn9aqs74gfvL1amp_2oylamxt4UAD43QD6DQMhB6iA,9656
24
25
  langgraph_api/sse.py,sha256=SLdtZmTdh5D8fbWrQjuY9HYLd2dg8Rmi6ZMmFMVc2iE,4204
@@ -34,7 +35,7 @@ langgraph_api/api/__init__.py,sha256=wrnxz_204b2Vhv4-N0WpiPf-ZpDDlmIQkbh-TiXPnOo
34
35
  langgraph_api/api/a2a.py,sha256=HIHZkLnIcM1u1FJti-L2NH-h1I9BZ_d-QW9z3gFonn8,53995
35
36
  langgraph_api/api/assistants.py,sha256=tRJse7Gr2BTeTZPljL05UvGkFiULpA-6hy03nBx9PF4,18177
36
37
  langgraph_api/api/mcp.py,sha256=qe10ZRMN3f-Hli-9TI8nbQyWvMeBb72YB1PZVbyqBQw,14418
37
- langgraph_api/api/meta.py,sha256=464nRdZPCPG-T1rouypReI8SPLHZlEec8dIj22H1Vvo,4787
38
+ langgraph_api/api/meta.py,sha256=_jG61UKs0J_alsCDgIwCAx1rX5pYuUwKrmOEpWnzR1I,4817
38
39
  langgraph_api/api/openapi.py,sha256=If-z1ckXt-Yu5bwQytK1LWyX_T7G46UtLfixgEP8hwc,11959
39
40
  langgraph_api/api/runs.py,sha256=keHlFu1iy-l1IICJHc6AKrSUoQA-LZi6FYsja7la9Xw,25436
40
41
  langgraph_api/api/store.py,sha256=xGcPFx4v-VxlK6HRU9uCjzCQ0v66cvc3o_PB5_g7n0Q,5550
@@ -109,8 +110,8 @@ langgraph_runtime/store.py,sha256=7mowndlsIroGHv3NpTSOZDJR0lCuaYMBoTnTrewjslw,11
109
110
  LICENSE,sha256=ZPwVR73Biwm3sK6vR54djCrhaRiM4cAD2zvOQZV8Xis,3859
110
111
  logging.json,sha256=3RNjSADZmDq38eHePMm1CbP6qZ71AmpBtLwCmKU9Zgo,379
111
112
  openapi.json,sha256=21wu-NxdxyTQwZctNcEfRkLMnSBi0QhGAfwq5kg8XNU,172618
112
- langgraph_api-0.4.36.dist-info/METADATA,sha256=HAidcwwtUaW07SG49fGJwggSl1U27apyxgnVBQ30M9k,4156
113
- langgraph_api-0.4.36.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
114
- langgraph_api-0.4.36.dist-info/entry_points.txt,sha256=hGedv8n7cgi41PypMfinwS_HfCwA7xJIfS0jAp8htV8,78
115
- langgraph_api-0.4.36.dist-info/licenses/LICENSE,sha256=ZPwVR73Biwm3sK6vR54djCrhaRiM4cAD2zvOQZV8Xis,3859
116
- langgraph_api-0.4.36.dist-info/RECORD,,
113
+ langgraph_api-0.4.38.dist-info/METADATA,sha256=rjxKjJ_3jgY9TQH1G08_iq0uVBl1B9a_5Fe788_i5S0,4156
114
+ langgraph_api-0.4.38.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
115
+ langgraph_api-0.4.38.dist-info/entry_points.txt,sha256=hGedv8n7cgi41PypMfinwS_HfCwA7xJIfS0jAp8htV8,78
116
+ langgraph_api-0.4.38.dist-info/licenses/LICENSE,sha256=ZPwVR73Biwm3sK6vR54djCrhaRiM4cAD2zvOQZV8Xis,3859
117
+ langgraph_api-0.4.38.dist-info/RECORD,,