langgraph-api 0.2.61__tar.gz → 0.2.63__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of langgraph-api might be problematic. Click here for more details.

Files changed (101) hide show
  1. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/PKG-INFO +1 -1
  2. langgraph_api-0.2.63/langgraph_api/__init__.py +1 -0
  3. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/api/meta.py +33 -19
  4. langgraph_api-0.2.63/langgraph_api/auth/studio_user.py +15 -0
  5. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/js/remote.py +11 -1
  6. langgraph_api-0.2.61/langgraph_api/__init__.py +0 -1
  7. langgraph_api-0.2.61/langgraph_api/auth/studio_user.py +0 -6
  8. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/.gitignore +0 -0
  9. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/LICENSE +0 -0
  10. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/Makefile +0 -0
  11. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/README.md +0 -0
  12. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/benchmark/weather.js +0 -0
  13. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/constraints.txt +0 -0
  14. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/forbidden.txt +0 -0
  15. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/healthcheck.py +0 -0
  16. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/api/__init__.py +0 -0
  17. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/api/assistants.py +0 -0
  18. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/api/mcp.py +0 -0
  19. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/api/openapi.py +0 -0
  20. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/api/runs.py +0 -0
  21. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/api/store.py +0 -0
  22. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/api/threads.py +0 -0
  23. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/api/ui.py +0 -0
  24. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/asgi_transport.py +0 -0
  25. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/asyncio.py +0 -0
  26. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/auth/__init__.py +0 -0
  27. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/auth/custom.py +0 -0
  28. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/auth/langsmith/__init__.py +0 -0
  29. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/auth/langsmith/backend.py +0 -0
  30. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/auth/langsmith/client.py +0 -0
  31. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/auth/middleware.py +0 -0
  32. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/auth/noop.py +0 -0
  33. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/cli.py +0 -0
  34. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/command.py +0 -0
  35. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/config.py +0 -0
  36. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/cron_scheduler.py +0 -0
  37. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/errors.py +0 -0
  38. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/graph.py +0 -0
  39. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/http.py +0 -0
  40. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/js/.gitignore +0 -0
  41. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/js/.prettierrc +0 -0
  42. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/js/__init__.py +0 -0
  43. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/js/base.py +0 -0
  44. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/js/build.mts +0 -0
  45. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/js/client.http.mts +0 -0
  46. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/js/client.mts +0 -0
  47. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/js/errors.py +0 -0
  48. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/js/global.d.ts +0 -0
  49. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/js/package.json +0 -0
  50. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/js/schema.py +0 -0
  51. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/js/src/graph.mts +0 -0
  52. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/js/src/load.hooks.mjs +0 -0
  53. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/js/src/preload.mjs +0 -0
  54. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/js/src/utils/files.mts +0 -0
  55. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/js/src/utils/importMap.mts +0 -0
  56. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
  57. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/js/src/utils/serde.mts +0 -0
  58. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/js/sse.py +0 -0
  59. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/js/tsconfig.json +0 -0
  60. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/js/ui.py +0 -0
  61. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/js/yarn.lock +0 -0
  62. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/logging.py +0 -0
  63. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/metadata.py +0 -0
  64. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/middleware/__init__.py +0 -0
  65. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/middleware/http_logger.py +0 -0
  66. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/middleware/private_network.py +0 -0
  67. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/middleware/request_id.py +0 -0
  68. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/models/__init__.py +0 -0
  69. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/models/run.py +0 -0
  70. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/patch.py +0 -0
  71. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/queue_entrypoint.py +0 -0
  72. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/route.py +0 -0
  73. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/schema.py +0 -0
  74. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/serde.py +0 -0
  75. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/server.py +0 -0
  76. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/sse.py +0 -0
  77. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/state.py +0 -0
  78. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/store.py +0 -0
  79. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/stream.py +0 -0
  80. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/thread_ttl.py +0 -0
  81. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/tunneling/cloudflare.py +0 -0
  82. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/utils.py +0 -0
  83. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/validation.py +0 -0
  84. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/webhook.py +0 -0
  85. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_api/worker.py +0 -0
  86. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_license/__init__.py +0 -0
  87. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_license/validation.py +0 -0
  88. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_runtime/__init__.py +0 -0
  89. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_runtime/checkpoint.py +0 -0
  90. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_runtime/database.py +0 -0
  91. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_runtime/lifespan.py +0 -0
  92. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_runtime/metrics.py +0 -0
  93. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_runtime/ops.py +0 -0
  94. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_runtime/queue.py +0 -0
  95. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_runtime/retry.py +0 -0
  96. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/langgraph_runtime/store.py +0 -0
  97. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/logging.json +0 -0
  98. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/openapi.json +0 -0
  99. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/pyproject.toml +0 -0
  100. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/scripts/create_license.py +0 -0
  101. {langgraph_api-0.2.61 → langgraph_api-0.2.63}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.2.61
3
+ Version: 0.2.63
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
@@ -0,0 +1 @@
1
+ __version__ = "0.2.63"
@@ -48,31 +48,45 @@ async def meta_metrics(request: ApiRequest):
48
48
 
49
49
  if metrics_format == "json":
50
50
  async with connect() as conn:
51
- return JSONResponse(
52
- {
53
- **pool_stats(),
54
- "workers": worker_metrics,
55
- "queue": await Runs.stats(conn),
56
- }
57
- )
51
+ resp = {
52
+ **pool_stats(),
53
+ "queue": await Runs.stats(conn),
54
+ }
55
+ if config.N_JOBS_PER_WORKER > 0:
56
+ resp["workers"] = worker_metrics
57
+ return JSONResponse(resp)
58
58
  elif metrics_format == "prometheus":
59
59
  # LANGSMITH_HOST_PROJECT_ID and LANGSMITH_HOST_REVISION_ID are injected
60
60
  # into the deployed image by host-backend.
61
61
  project_id = os.getenv("LANGSMITH_HOST_PROJECT_ID")
62
62
  revision_id = os.getenv("LANGSMITH_HOST_REVISION_ID")
63
63
 
64
- metrics = [
65
- "# HELP lg_api_workers_max The maximum number of workers available.",
66
- "# TYPE lg_api_workers_max gauge",
67
- f'lg_api_workers_max{{project_id="{project_id}", revision_id="{revision_id}"}} {workers_max}',
68
- "# HELP lg_api_workers_active The number of currently active workers.",
69
- "# TYPE lg_api_workers_active gauge",
70
- f'lg_api_workers_active{{project_id="{project_id}", revision_id="{revision_id}"}} {workers_active}',
71
- "# HELP lg_api_workers_available The number of available (idle) workers.",
72
- "# TYPE lg_api_workers_available gauge",
73
- f'lg_api_workers_available{{project_id="{project_id}", revision_id="{revision_id}"}} {workers_available}',
74
- # In the future, we can add more metrics to be scraped by Prometheus.
75
- ]
64
+ async with connect() as conn:
65
+ queue_stats = await Runs.stats(conn)
66
+
67
+ metrics = [
68
+ "# HELP lg_api_num_pending_runs The number of runs currently pending.",
69
+ "# TYPE lg_api_num_pending_runs gauge",
70
+ f'lg_api_num_pending_runs{{project_id="{project_id}", revision_id="{revision_id}"}} {queue_stats["n_pending"]}',
71
+ "# HELP lg_api_num_running_runs The number of runs currently running.",
72
+ "# TYPE lg_api_num_running_runs gauge",
73
+ f'lg_api_num_running_runs{{project_id="{project_id}", revision_id="{revision_id}"}} {queue_stats["n_running"]}',
74
+ ]
75
+
76
+ if config.N_JOBS_PER_WORKER > 0:
77
+ metrics.extend(
78
+ [
79
+ "# HELP lg_api_workers_max The maximum number of workers available.",
80
+ "# TYPE lg_api_workers_max gauge",
81
+ f'lg_api_workers_max{{project_id="{project_id}", revision_id="{revision_id}"}} {workers_max}',
82
+ "# HELP lg_api_workers_active The number of currently active workers.",
83
+ "# TYPE lg_api_workers_active gauge",
84
+ f'lg_api_workers_active{{project_id="{project_id}", revision_id="{revision_id}"}} {workers_active}',
85
+ "# HELP lg_api_workers_available The number of available (idle) workers.",
86
+ "# TYPE lg_api_workers_available gauge",
87
+ f'lg_api_workers_available{{project_id="{project_id}", revision_id="{revision_id}"}} {workers_available}',
88
+ ]
89
+ )
76
90
 
77
91
  metrics_response = "\n".join(metrics)
78
92
  return PlainTextResponse(metrics_response)
@@ -0,0 +1,15 @@
1
+ from langgraph_sdk.auth.types import StudioUser as StudioUserBase
2
+ from starlette.authentication import BaseUser
3
+
4
+
5
+ class StudioUser(StudioUserBase, BaseUser):
6
+ """StudioUser class."""
7
+
8
+ def dict(self):
9
+ return {
10
+ "kind": "StudioUser",
11
+ "is_authenticated": self.is_authenticated,
12
+ "display_name": self.display_name,
13
+ "identity": self.identity,
14
+ "permissions": self.permissions,
15
+ }
@@ -858,6 +858,16 @@ async def handle_js_auth_event(
858
858
  ctx: Auth.types.AuthContext | None,
859
859
  value: dict,
860
860
  ) -> Auth.types.FilterType | None:
861
+ if hasattr(ctx.user, "dict") and callable(ctx.user.dict):
862
+ user = ctx.user.dict()
863
+ else:
864
+ user = {
865
+ "is_authenticated": ctx.user.is_authenticated,
866
+ "display_name": ctx.user.display_name,
867
+ "identity": ctx.user.identity,
868
+ "permissions": ctx.user.permissions,
869
+ }
870
+
861
871
  res = await _client.post(
862
872
  "/auth/authorize",
863
873
  headers={"Content-Type": "application/json"},
@@ -868,7 +878,7 @@ async def handle_js_auth_event(
868
878
  "value": value,
869
879
  "context": (
870
880
  {
871
- "user": cast(DotDict, ctx.user).dict(),
881
+ "user": user,
872
882
  "scopes": ctx.permissions,
873
883
  }
874
884
  if ctx
@@ -1 +0,0 @@
1
- __version__ = "0.2.61"
@@ -1,6 +0,0 @@
1
- from langgraph_sdk.auth.types import StudioUser as StudioUserBase
2
- from starlette.authentication import BaseUser
3
-
4
-
5
- class StudioUser(StudioUserBase, BaseUser):
6
- """StudioUser class."""
File without changes
File without changes
File without changes
File without changes