langgraph-api 0.4.26__tar.gz → 0.4.28__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/PKG-INFO +1 -1
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/benchmark/update-revision.js +5 -0
- langgraph_api-0.4.28/langgraph_api/__init__.py +1 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/api/a2a.py +22 -2
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/cli.py +2 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/config.py +2 -2
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/queue_entrypoint.py +40 -22
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/uv.lock +40 -40
- langgraph_api-0.4.26/langgraph_api/__init__.py +0 -1
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/.gitignore +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/LICENSE +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/Makefile +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/README.md +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/benchmark/.gitignore +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/benchmark/Makefile +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/benchmark/README.md +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/benchmark/burst.js +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/benchmark/clean.js +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/benchmark/graphs.js +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/benchmark/package.json +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/benchmark/ramp.js +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/benchmark/weather.js +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/constraints.txt +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/forbidden.txt +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/healthcheck.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/api/__init__.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/api/assistants.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/api/mcp.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/api/meta.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/api/openapi.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/api/runs.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/api/store.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/api/threads.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/api/ui.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/asgi_transport.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/asyncio.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/auth/__init__.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/auth/custom.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/auth/langsmith/__init__.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/auth/langsmith/backend.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/auth/langsmith/client.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/auth/middleware.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/auth/noop.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/auth/studio_user.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/command.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/cron_scheduler.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/errors.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/executor_entrypoint.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/feature_flags.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/graph.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/http.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/http_metrics.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/js/.gitignore +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/js/.prettierrc +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/js/__init__.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/js/base.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/js/build.mts +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/js/client.http.mts +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/js/client.mts +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/js/errors.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/js/global.d.ts +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/js/package.json +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/js/remote.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/js/schema.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/js/src/graph.mts +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/js/src/load.hooks.mjs +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/js/src/preload.mjs +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/js/src/utils/files.mts +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/js/src/utils/importMap.mts +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/js/src/utils/serde.mts +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/js/sse.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/js/traceblock.mts +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/js/tsconfig.json +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/js/ui.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/js/yarn.lock +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/logging.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/metadata.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/middleware/__init__.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/middleware/http_logger.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/middleware/private_network.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/middleware/request_id.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/models/__init__.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/models/run.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/patch.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/route.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/schema.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/serde.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/server.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/sse.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/state.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/store.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/stream.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/thread_ttl.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/traceblock.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/tunneling/cloudflare.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/utils/__init__.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/utils/cache.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/utils/config.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/utils/future.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/utils/headers.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/utils/retriable_client.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/utils/stream_codec.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/utils/uuids.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/validation.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/webhook.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_api/worker.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_license/__init__.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_license/validation.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_runtime/__init__.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_runtime/checkpoint.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_runtime/database.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_runtime/lifespan.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_runtime/metrics.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_runtime/ops.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_runtime/queue.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_runtime/retry.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/langgraph_runtime/store.py +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/logging.json +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/openapi.json +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/pyproject.toml +0 -0
- {langgraph_api-0.4.26 → langgraph_api-0.4.28}/scripts/create_license.py +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.4.28"
|
|
@@ -674,12 +674,12 @@ async def handle_post_request(request: ApiRequest, assistant_id: str) -> Respons
|
|
|
674
674
|
|
|
675
675
|
accept_header = request.headers.get("Accept") or ""
|
|
676
676
|
if method == "message/stream":
|
|
677
|
-
if "text/event-stream"
|
|
677
|
+
if not _accepts_media_type(accept_header, "text/event-stream"):
|
|
678
678
|
return create_error_response(
|
|
679
679
|
"Accept header must include text/event-stream for streaming", 400
|
|
680
680
|
)
|
|
681
681
|
else:
|
|
682
|
-
if "application/json"
|
|
682
|
+
if not _accepts_media_type(accept_header, "application/json"):
|
|
683
683
|
return create_error_response(
|
|
684
684
|
"Accept header must include application/json", 400
|
|
685
685
|
)
|
|
@@ -720,6 +720,26 @@ def create_error_response(message: str, status_code: int) -> Response:
|
|
|
720
720
|
)
|
|
721
721
|
|
|
722
722
|
|
|
723
|
+
def _accepts_media_type(accept_header: str, media_type: str) -> bool:
|
|
724
|
+
"""Return True if the Accept header allows the provided media type."""
|
|
725
|
+
if not accept_header:
|
|
726
|
+
return False
|
|
727
|
+
|
|
728
|
+
target = media_type.lower()
|
|
729
|
+
for media_range in accept_header.split(","):
|
|
730
|
+
value = media_range.strip().lower()
|
|
731
|
+
if not value:
|
|
732
|
+
continue
|
|
733
|
+
candidate = value.split(";", 1)[0].strip()
|
|
734
|
+
if candidate == "*/*" or candidate == target:
|
|
735
|
+
return True
|
|
736
|
+
if candidate.endswith("/*"):
|
|
737
|
+
type_prefix = candidate.split("/", 1)[0]
|
|
738
|
+
if target.startswith(f"{type_prefix}/"):
|
|
739
|
+
return True
|
|
740
|
+
return False
|
|
741
|
+
|
|
742
|
+
|
|
723
743
|
# ============================================================================
|
|
724
744
|
# JSON-RPC Message Handlers
|
|
725
745
|
# ============================================================================
|
|
@@ -165,6 +165,8 @@ def run_server(
|
|
|
165
165
|
mount_prefix = None
|
|
166
166
|
if http is not None and http.get("mount_prefix") is not None:
|
|
167
167
|
mount_prefix = http.get("mount_prefix")
|
|
168
|
+
if os.environ.get("MOUNT_PREFIX"):
|
|
169
|
+
mount_prefix = os.environ.get("MOUNT_PREFIX")
|
|
168
170
|
if os.environ.get("LANGGRAPH_MOUNT_PREFIX"):
|
|
169
171
|
mount_prefix = os.environ.get("LANGGRAPH_MOUNT_PREFIX")
|
|
170
172
|
if isinstance(env, str | pathlib.Path):
|
|
@@ -179,8 +179,6 @@ REDIS_URI = env("REDIS_URI", cast=str)
|
|
|
179
179
|
REDIS_CLUSTER = env("REDIS_CLUSTER", cast=bool, default=False)
|
|
180
180
|
REDIS_MAX_CONNECTIONS = env("REDIS_MAX_CONNECTIONS", cast=int, default=2000)
|
|
181
181
|
REDIS_CONNECT_TIMEOUT = env("REDIS_CONNECT_TIMEOUT", cast=float, default=10.0)
|
|
182
|
-
REDIS_MAX_IDLE_TIME = env("REDIS_MAX_IDLE_TIME", cast=float, default=120.0)
|
|
183
|
-
REDIS_STREAM_TIMEOUT = env("REDIS_STREAM_TIMEOUT", cast=float, default=30.0)
|
|
184
182
|
REDIS_KEY_PREFIX = env("REDIS_KEY_PREFIX", cast=str, default="")
|
|
185
183
|
RUN_STATS_CACHE_SECONDS = env("RUN_STATS_CACHE_SECONDS", cast=int, default=60)
|
|
186
184
|
|
|
@@ -290,8 +288,10 @@ if THREAD_TTL is None and CHECKPOINTER_CONFIG is not None:
|
|
|
290
288
|
|
|
291
289
|
N_JOBS_PER_WORKER = env("N_JOBS_PER_WORKER", cast=int, default=10)
|
|
292
290
|
BG_JOB_TIMEOUT_SECS = env("BG_JOB_TIMEOUT_SECS", cast=float, default=3600)
|
|
291
|
+
|
|
293
292
|
FF_CRONS_ENABLED = env("FF_CRONS_ENABLED", cast=bool, default=True)
|
|
294
293
|
FF_RICH_THREADS = env("FF_RICH_THREADS", cast=bool, default=True)
|
|
294
|
+
FF_LOG_DROPPED_EVENTS = env("FF_LOG_DROPPED_EVENTS", cast=bool, default=False)
|
|
295
295
|
|
|
296
296
|
# auth
|
|
297
297
|
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# ruff: noqa: E402
|
|
2
2
|
import os
|
|
3
3
|
|
|
4
|
+
from langgraph_api.api.meta import METRICS_FORMATS
|
|
5
|
+
|
|
4
6
|
if not (
|
|
5
7
|
(disable_truststore := os.getenv("DISABLE_TRUSTSTORE"))
|
|
6
8
|
and disable_truststore.lower() == "true"
|
|
@@ -30,6 +32,7 @@ logger = structlog.stdlib.get_logger(__name__)
|
|
|
30
32
|
async def health_and_metrics_server():
|
|
31
33
|
import uvicorn
|
|
32
34
|
from starlette.applications import Starlette
|
|
35
|
+
from starlette.requests import Request
|
|
33
36
|
from starlette.responses import JSONResponse, PlainTextResponse
|
|
34
37
|
from starlette.routing import Route
|
|
35
38
|
|
|
@@ -38,7 +41,14 @@ async def health_and_metrics_server():
|
|
|
38
41
|
async def health_endpoint(request):
|
|
39
42
|
return JSONResponse({"status": "ok"})
|
|
40
43
|
|
|
41
|
-
async def metrics_endpoint(request):
|
|
44
|
+
async def metrics_endpoint(request: Request):
|
|
45
|
+
metrics_format = request.query_params.get("format", "prometheus")
|
|
46
|
+
if metrics_format not in METRICS_FORMATS:
|
|
47
|
+
await logger.awarning(
|
|
48
|
+
f"metrics format {metrics_format} not supported, falling back to prometheus"
|
|
49
|
+
)
|
|
50
|
+
metrics_format = "prometheus"
|
|
51
|
+
|
|
42
52
|
metrics = get_metrics()
|
|
43
53
|
worker_metrics = cast(dict[str, int], metrics["workers"])
|
|
44
54
|
workers_max = worker_metrics["max"]
|
|
@@ -48,29 +58,37 @@ async def health_and_metrics_server():
|
|
|
48
58
|
project_id = os.getenv("LANGSMITH_HOST_PROJECT_ID")
|
|
49
59
|
revision_id = os.getenv("LANGSMITH_HOST_REVISION_ID")
|
|
50
60
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
"# HELP lg_api_workers_active The number of currently active workers.",
|
|
56
|
-
"# TYPE lg_api_workers_active gauge",
|
|
57
|
-
f'lg_api_workers_active{{project_id="{project_id}", revision_id="{revision_id}"}} {workers_active}',
|
|
58
|
-
"# HELP lg_api_workers_available The number of available (idle) workers.",
|
|
59
|
-
"# TYPE lg_api_workers_available gauge",
|
|
60
|
-
f'lg_api_workers_available{{project_id="{project_id}", revision_id="{revision_id}"}} {workers_available}',
|
|
61
|
-
]
|
|
62
|
-
|
|
63
|
-
metrics_lines.extend(
|
|
64
|
-
pool_stats(
|
|
65
|
-
project_id=project_id,
|
|
66
|
-
revision_id=revision_id,
|
|
67
|
-
)
|
|
61
|
+
pg_redis_stats = pool_stats(
|
|
62
|
+
project_id=project_id,
|
|
63
|
+
revision_id=revision_id,
|
|
64
|
+
format=metrics_format,
|
|
68
65
|
)
|
|
69
66
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
67
|
+
if metrics_format == "json":
|
|
68
|
+
resp = {
|
|
69
|
+
**pg_redis_stats,
|
|
70
|
+
"workers": worker_metrics,
|
|
71
|
+
}
|
|
72
|
+
return JSONResponse(resp)
|
|
73
|
+
elif metrics_format == "prometheus":
|
|
74
|
+
metrics_lines = [
|
|
75
|
+
"# HELP lg_api_workers_max The maximum number of workers available.",
|
|
76
|
+
"# TYPE lg_api_workers_max gauge",
|
|
77
|
+
f'lg_api_workers_max{{project_id="{project_id}", revision_id="{revision_id}"}} {workers_max}',
|
|
78
|
+
"# HELP lg_api_workers_active The number of currently active workers.",
|
|
79
|
+
"# TYPE lg_api_workers_active gauge",
|
|
80
|
+
f'lg_api_workers_active{{project_id="{project_id}", revision_id="{revision_id}"}} {workers_active}',
|
|
81
|
+
"# HELP lg_api_workers_available The number of available (idle) workers.",
|
|
82
|
+
"# TYPE lg_api_workers_available gauge",
|
|
83
|
+
f'lg_api_workers_available{{project_id="{project_id}", revision_id="{revision_id}"}} {workers_available}',
|
|
84
|
+
]
|
|
85
|
+
|
|
86
|
+
metrics_lines.extend(pg_redis_stats)
|
|
87
|
+
|
|
88
|
+
return PlainTextResponse(
|
|
89
|
+
"\n".join(metrics_lines),
|
|
90
|
+
media_type="text/plain; version=0.0.4; charset=utf-8",
|
|
91
|
+
)
|
|
74
92
|
|
|
75
93
|
app = Starlette(
|
|
76
94
|
routes=[
|
|
@@ -183,14 +183,14 @@ wheels = [
|
|
|
183
183
|
|
|
184
184
|
[[package]]
|
|
185
185
|
name = "click"
|
|
186
|
-
version = "8.
|
|
186
|
+
version = "8.3.0"
|
|
187
187
|
source = { registry = "https://pypi.org/simple" }
|
|
188
188
|
dependencies = [
|
|
189
189
|
{ name = "colorama", marker = "sys_platform == 'win32'" },
|
|
190
190
|
]
|
|
191
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
191
|
+
sdist = { url = "https://files.pythonhosted.org/packages/46/61/de6cd827efad202d7057d93e0fed9294b96952e188f7384832791c7b2254/click-8.3.0.tar.gz", hash = "sha256:e7b8232224eba16f4ebe410c25ced9f7875cb5f3263ffc93cc3e8da705e229c4", size = 276943, upload-time = "2025-09-18T17:32:23.696Z" }
|
|
192
192
|
wheels = [
|
|
193
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
193
|
+
{ url = "https://files.pythonhosted.org/packages/db/d3/9dcc0f5797f070ec8edf30fbadfb200e71d9db6b84d211e3b2085a7589a0/click-8.3.0-py3-none-any.whl", hash = "sha256:9b9f285302c6e3064f4330c05f05b81945b2a39544279343e6e7c5f27a9baddc", size = 107295, upload-time = "2025-09-18T17:32:22.42Z" },
|
|
194
194
|
]
|
|
195
195
|
|
|
196
196
|
[[package]]
|
|
@@ -263,16 +263,16 @@ wheels = [
|
|
|
263
263
|
|
|
264
264
|
[[package]]
|
|
265
265
|
name = "fastapi"
|
|
266
|
-
version = "0.
|
|
266
|
+
version = "0.117.1"
|
|
267
267
|
source = { registry = "https://pypi.org/simple" }
|
|
268
268
|
dependencies = [
|
|
269
269
|
{ name = "pydantic" },
|
|
270
270
|
{ name = "starlette" },
|
|
271
271
|
{ name = "typing-extensions" },
|
|
272
272
|
]
|
|
273
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
273
|
+
sdist = { url = "https://files.pythonhosted.org/packages/7e/7e/d9788300deaf416178f61fb3c2ceb16b7d0dc9f82a08fdb87a5e64ee3cc7/fastapi-0.117.1.tar.gz", hash = "sha256:fb2d42082d22b185f904ca0ecad2e195b851030bd6c5e4c032d1c981240c631a", size = 307155, upload-time = "2025-09-20T20:16:56.663Z" }
|
|
274
274
|
wheels = [
|
|
275
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
275
|
+
{ url = "https://files.pythonhosted.org/packages/6d/45/d9d3e8eeefbe93be1c50060a9d9a9f366dba66f288bb518a9566a23a8631/fastapi-0.117.1-py3-none-any.whl", hash = "sha256:33c51a0d21cab2b9722d4e56dbb9316f3687155be6b276191790d8da03507552", size = 95959, upload-time = "2025-09-20T20:16:53.661Z" },
|
|
276
276
|
]
|
|
277
277
|
|
|
278
278
|
[[package]]
|
|
@@ -593,20 +593,20 @@ dev = [
|
|
|
593
593
|
|
|
594
594
|
[[package]]
|
|
595
595
|
name = "langgraph-sdk"
|
|
596
|
-
version = "0.2.
|
|
596
|
+
version = "0.2.9"
|
|
597
597
|
source = { registry = "https://pypi.org/simple" }
|
|
598
598
|
dependencies = [
|
|
599
599
|
{ name = "httpx" },
|
|
600
600
|
{ name = "orjson" },
|
|
601
601
|
]
|
|
602
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
602
|
+
sdist = { url = "https://files.pythonhosted.org/packages/23/d8/40e01190a73c564a4744e29a6c902f78d34d43dad9b652a363a92a67059c/langgraph_sdk-0.2.9.tar.gz", hash = "sha256:b3bd04c6be4fa382996cd2be8fbc1e7cc94857d2bc6b6f4599a7f2a245975303", size = 99802, upload-time = "2025-09-20T18:49:14.734Z" }
|
|
603
603
|
wheels = [
|
|
604
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
604
|
+
{ url = "https://files.pythonhosted.org/packages/66/05/b2d34e16638241e6f27a6946d28160d4b8b641383787646d41a3727e0896/langgraph_sdk-0.2.9-py3-none-any.whl", hash = "sha256:fbf302edadbf0fb343596f91c597794e936ef68eebc0d3e1d358b6f9f72a1429", size = 56752, upload-time = "2025-09-20T18:49:13.346Z" },
|
|
605
605
|
]
|
|
606
606
|
|
|
607
607
|
[[package]]
|
|
608
608
|
name = "langsmith"
|
|
609
|
-
version = "0.4.
|
|
609
|
+
version = "0.4.30"
|
|
610
610
|
source = { registry = "https://pypi.org/simple" }
|
|
611
611
|
dependencies = [
|
|
612
612
|
{ name = "httpx" },
|
|
@@ -617,9 +617,9 @@ dependencies = [
|
|
|
617
617
|
{ name = "requests-toolbelt" },
|
|
618
618
|
{ name = "zstandard" },
|
|
619
619
|
]
|
|
620
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
620
|
+
sdist = { url = "https://files.pythonhosted.org/packages/fe/d5/4cc88f246ce615a518a715cd2bf40001d1678ad6805a3706a90570adca8f/langsmith-0.4.30.tar.gz", hash = "sha256:388fe1060aca6507be41f417c7d4168a92dffe27f28bb6ef8a1bfee4a59f3681", size = 958857, upload-time = "2025-09-22T19:05:14.156Z" }
|
|
621
621
|
wheels = [
|
|
622
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
622
|
+
{ url = "https://files.pythonhosted.org/packages/ae/d1/b2b2ea7b443c6b028aca209d2e653256912906900cc146e64c65201211b7/langsmith-0.4.30-py3-none-any.whl", hash = "sha256:110767eb83e6da2cc99cfc61958631b5c36624758b52e7af35ec5550ad846cb3", size = 386300, upload-time = "2025-09-22T19:05:11.819Z" },
|
|
623
623
|
]
|
|
624
624
|
|
|
625
625
|
[[package]]
|
|
@@ -1058,28 +1058,28 @@ wheels = [
|
|
|
1058
1058
|
|
|
1059
1059
|
[[package]]
|
|
1060
1060
|
name = "ruff"
|
|
1061
|
-
version = "0.13.
|
|
1062
|
-
source = { registry = "https://pypi.org/simple" }
|
|
1063
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1064
|
-
wheels = [
|
|
1065
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1066
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1067
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1068
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1069
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1070
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1071
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1072
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1073
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1074
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1075
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1076
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1077
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1078
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1079
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1080
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1081
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1082
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1061
|
+
version = "0.13.1"
|
|
1062
|
+
source = { registry = "https://pypi.org/simple" }
|
|
1063
|
+
sdist = { url = "https://files.pythonhosted.org/packages/ab/33/c8e89216845615d14d2d42ba2bee404e7206a8db782f33400754f3799f05/ruff-0.13.1.tar.gz", hash = "sha256:88074c3849087f153d4bb22e92243ad4c1b366d7055f98726bc19aa08dc12d51", size = 5397987, upload-time = "2025-09-18T19:52:44.33Z" }
|
|
1064
|
+
wheels = [
|
|
1065
|
+
{ url = "https://files.pythonhosted.org/packages/f3/41/ca37e340938f45cfb8557a97a5c347e718ef34702546b174e5300dbb1f28/ruff-0.13.1-py3-none-linux_armv6l.whl", hash = "sha256:b2abff595cc3cbfa55e509d89439b5a09a6ee3c252d92020bd2de240836cf45b", size = 12304308, upload-time = "2025-09-18T19:51:56.253Z" },
|
|
1066
|
+
{ url = "https://files.pythonhosted.org/packages/ff/84/ba378ef4129415066c3e1c80d84e539a0d52feb250685091f874804f28af/ruff-0.13.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:4ee9f4249bf7f8bb3984c41bfaf6a658162cdb1b22e3103eabc7dd1dc5579334", size = 12937258, upload-time = "2025-09-18T19:52:00.184Z" },
|
|
1067
|
+
{ url = "https://files.pythonhosted.org/packages/8d/b6/ec5e4559ae0ad955515c176910d6d7c93edcbc0ed1a3195a41179c58431d/ruff-0.13.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:5c5da4af5f6418c07d75e6f3224e08147441f5d1eac2e6ce10dcce5e616a3bae", size = 12214554, upload-time = "2025-09-18T19:52:02.753Z" },
|
|
1068
|
+
{ url = "https://files.pythonhosted.org/packages/70/d6/cb3e3b4f03b9b0c4d4d8f06126d34b3394f6b4d764912fe80a1300696ef6/ruff-0.13.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80524f84a01355a59a93cef98d804e2137639823bcee2931f5028e71134a954e", size = 12448181, upload-time = "2025-09-18T19:52:05.279Z" },
|
|
1069
|
+
{ url = "https://files.pythonhosted.org/packages/d2/ea/bf60cb46d7ade706a246cd3fb99e4cfe854efa3dfbe530d049c684da24ff/ruff-0.13.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff7f5ce8d7988767dd46a148192a14d0f48d1baea733f055d9064875c7d50389", size = 12104599, upload-time = "2025-09-18T19:52:07.497Z" },
|
|
1070
|
+
{ url = "https://files.pythonhosted.org/packages/2d/3e/05f72f4c3d3a69e65d55a13e1dd1ade76c106d8546e7e54501d31f1dc54a/ruff-0.13.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c55d84715061f8b05469cdc9a446aa6c7294cd4bd55e86a89e572dba14374f8c", size = 13791178, upload-time = "2025-09-18T19:52:10.189Z" },
|
|
1071
|
+
{ url = "https://files.pythonhosted.org/packages/81/e7/01b1fc403dd45d6cfe600725270ecc6a8f8a48a55bc6521ad820ed3ceaf8/ruff-0.13.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:ac57fed932d90fa1624c946dc67a0a3388d65a7edc7d2d8e4ca7bddaa789b3b0", size = 14814474, upload-time = "2025-09-18T19:52:12.866Z" },
|
|
1072
|
+
{ url = "https://files.pythonhosted.org/packages/fa/92/d9e183d4ed6185a8df2ce9faa3f22e80e95b5f88d9cc3d86a6d94331da3f/ruff-0.13.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c366a71d5b4f41f86a008694f7a0d75fe409ec298685ff72dc882f882d532e36", size = 14217531, upload-time = "2025-09-18T19:52:15.245Z" },
|
|
1073
|
+
{ url = "https://files.pythonhosted.org/packages/3b/4a/6ddb1b11d60888be224d721e01bdd2d81faaf1720592858ab8bac3600466/ruff-0.13.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4ea9d1b5ad3e7a83ee8ebb1229c33e5fe771e833d6d3dcfca7b77d95b060d38", size = 13265267, upload-time = "2025-09-18T19:52:17.649Z" },
|
|
1074
|
+
{ url = "https://files.pythonhosted.org/packages/81/98/3f1d18a8d9ea33ef2ad508f0417fcb182c99b23258ec5e53d15db8289809/ruff-0.13.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0f70202996055b555d3d74b626406476cc692f37b13bac8828acff058c9966a", size = 13243120, upload-time = "2025-09-18T19:52:20.332Z" },
|
|
1075
|
+
{ url = "https://files.pythonhosted.org/packages/8d/86/b6ce62ce9c12765fa6c65078d1938d2490b2b1d9273d0de384952b43c490/ruff-0.13.1-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:f8cff7a105dad631085d9505b491db33848007d6b487c3c1979dd8d9b2963783", size = 13443084, upload-time = "2025-09-18T19:52:23.032Z" },
|
|
1076
|
+
{ url = "https://files.pythonhosted.org/packages/a1/6e/af7943466a41338d04503fb5a81b2fd07251bd272f546622e5b1599a7976/ruff-0.13.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:9761e84255443316a258dd7dfbd9bfb59c756e52237ed42494917b2577697c6a", size = 12295105, upload-time = "2025-09-18T19:52:25.263Z" },
|
|
1077
|
+
{ url = "https://files.pythonhosted.org/packages/3f/97/0249b9a24f0f3ebd12f007e81c87cec6d311de566885e9309fcbac5b24cc/ruff-0.13.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:3d376a88c3102ef228b102211ef4a6d13df330cb0f5ca56fdac04ccec2a99700", size = 12072284, upload-time = "2025-09-18T19:52:27.478Z" },
|
|
1078
|
+
{ url = "https://files.pythonhosted.org/packages/f6/85/0b64693b2c99d62ae65236ef74508ba39c3febd01466ef7f354885e5050c/ruff-0.13.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:cbefd60082b517a82c6ec8836989775ac05f8991715d228b3c1d86ccc7df7dae", size = 12970314, upload-time = "2025-09-18T19:52:30.212Z" },
|
|
1079
|
+
{ url = "https://files.pythonhosted.org/packages/96/fc/342e9f28179915d28b3747b7654f932ca472afbf7090fc0c4011e802f494/ruff-0.13.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:dd16b9a5a499fe73f3c2ef09a7885cb1d97058614d601809d37c422ed1525317", size = 13422360, upload-time = "2025-09-18T19:52:32.676Z" },
|
|
1080
|
+
{ url = "https://files.pythonhosted.org/packages/37/54/6177a0dc10bce6f43e392a2192e6018755473283d0cf43cc7e6afc182aea/ruff-0.13.1-py3-none-win32.whl", hash = "sha256:55e9efa692d7cb18580279f1fbb525146adc401f40735edf0aaeabd93099f9a0", size = 12178448, upload-time = "2025-09-18T19:52:35.545Z" },
|
|
1081
|
+
{ url = "https://files.pythonhosted.org/packages/64/51/c6a3a33d9938007b8bdc8ca852ecc8d810a407fb513ab08e34af12dc7c24/ruff-0.13.1-py3-none-win_amd64.whl", hash = "sha256:3a3fb595287ee556de947183489f636b9f76a72f0fa9c028bdcabf5bab2cc5e5", size = 13286458, upload-time = "2025-09-18T19:52:38.198Z" },
|
|
1082
|
+
{ url = "https://files.pythonhosted.org/packages/fd/04/afc078a12cf68592345b1e2d6ecdff837d286bac023d7a22c54c7a698c5b/ruff-0.13.1-py3-none-win_arm64.whl", hash = "sha256:c0bae9ffd92d54e03c2bf266f466da0a65e145f298ee5b5846ed435f6a00518a", size = 12437893, upload-time = "2025-09-18T19:52:41.283Z" },
|
|
1083
1083
|
]
|
|
1084
1084
|
|
|
1085
1085
|
[[package]]
|
|
@@ -1119,15 +1119,15 @@ wheels = [
|
|
|
1119
1119
|
|
|
1120
1120
|
[[package]]
|
|
1121
1121
|
name = "starlette"
|
|
1122
|
-
version = "0.
|
|
1122
|
+
version = "0.48.0"
|
|
1123
1123
|
source = { registry = "https://pypi.org/simple" }
|
|
1124
1124
|
dependencies = [
|
|
1125
1125
|
{ name = "anyio" },
|
|
1126
1126
|
{ name = "typing-extensions", marker = "python_full_version < '3.13'" },
|
|
1127
1127
|
]
|
|
1128
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1128
|
+
sdist = { url = "https://files.pythonhosted.org/packages/a7/a5/d6f429d43394057b67a6b5bbe6eae2f77a6bf7459d961fdb224bf206eee6/starlette-0.48.0.tar.gz", hash = "sha256:7e8cee469a8ab2352911528110ce9088fdc6a37d9876926e73da7ce4aa4c7a46", size = 2652949, upload-time = "2025-09-13T08:41:05.699Z" }
|
|
1129
1129
|
wheels = [
|
|
1130
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1130
|
+
{ url = "https://files.pythonhosted.org/packages/be/72/2db2f49247d0a18b4f1bb9a5a39a0162869acf235f3a96418363947b3d46/starlette-0.48.0-py3-none-any.whl", hash = "sha256:0764ca97b097582558ecb498132ed0c7d942f233f365b86ba37770e026510659", size = 73736, upload-time = "2025-09-13T08:41:03.869Z" },
|
|
1131
1131
|
]
|
|
1132
1132
|
|
|
1133
1133
|
[[package]]
|
|
@@ -1189,15 +1189,15 @@ wheels = [
|
|
|
1189
1189
|
|
|
1190
1190
|
[[package]]
|
|
1191
1191
|
name = "uvicorn"
|
|
1192
|
-
version = "0.
|
|
1192
|
+
version = "0.36.0"
|
|
1193
1193
|
source = { registry = "https://pypi.org/simple" }
|
|
1194
1194
|
dependencies = [
|
|
1195
1195
|
{ name = "click" },
|
|
1196
1196
|
{ name = "h11" },
|
|
1197
1197
|
]
|
|
1198
|
-
sdist = { url = "https://files.pythonhosted.org/packages/5e/
|
|
1198
|
+
sdist = { url = "https://files.pythonhosted.org/packages/ef/5e/f0cd46063a02fd8515f0e880c37d2657845b7306c16ce6c4ffc44afd9036/uvicorn-0.36.0.tar.gz", hash = "sha256:527dc68d77819919d90a6b267be55f0e76704dca829d34aea9480be831a9b9d9", size = 80032, upload-time = "2025-09-20T01:07:14.418Z" }
|
|
1199
1199
|
wheels = [
|
|
1200
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1200
|
+
{ url = "https://files.pythonhosted.org/packages/96/06/5cc0542b47c0338c1cb676b348e24a1c29acabc81000bced518231dded6f/uvicorn-0.36.0-py3-none-any.whl", hash = "sha256:6bb4ba67f16024883af8adf13aba3a9919e415358604ce46780d3f9bdc36d731", size = 67675, upload-time = "2025-09-20T01:07:12.984Z" },
|
|
1201
1201
|
]
|
|
1202
1202
|
|
|
1203
1203
|
[[package]]
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "0.4.26"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|