langgraph-api 0.2.134__tar.gz → 0.2.135__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 (120) hide show
  1. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/PKG-INFO +1 -1
  2. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/benchmark/Makefile +8 -0
  3. langgraph_api-0.2.135/benchmark/clean.js +87 -0
  4. langgraph_api-0.2.135/benchmark/update-revision.js +148 -0
  5. langgraph_api-0.2.135/langgraph_api/__init__.py +1 -0
  6. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/route.py +2 -1
  7. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/uv.lock +6 -6
  8. langgraph_api-0.2.134/langgraph_api/__init__.py +0 -1
  9. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/.gitignore +0 -0
  10. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/LICENSE +0 -0
  11. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/Makefile +0 -0
  12. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/README.md +0 -0
  13. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/benchmark/.gitignore +0 -0
  14. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/benchmark/README.md +0 -0
  15. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/benchmark/burst.js +0 -0
  16. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/benchmark/graphs.js +0 -0
  17. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/benchmark/package.json +0 -0
  18. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/benchmark/ramp.js +0 -0
  19. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/benchmark/weather.js +0 -0
  20. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/constraints.txt +0 -0
  21. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/forbidden.txt +0 -0
  22. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/healthcheck.py +0 -0
  23. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/api/__init__.py +0 -0
  24. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/api/assistants.py +0 -0
  25. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/api/mcp.py +0 -0
  26. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/api/meta.py +0 -0
  27. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/api/openapi.py +0 -0
  28. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/api/runs.py +0 -0
  29. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/api/store.py +0 -0
  30. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/api/threads.py +0 -0
  31. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/api/ui.py +0 -0
  32. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/asgi_transport.py +0 -0
  33. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/asyncio.py +0 -0
  34. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/auth/__init__.py +0 -0
  35. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/auth/custom.py +0 -0
  36. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/auth/langsmith/__init__.py +0 -0
  37. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/auth/langsmith/backend.py +0 -0
  38. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/auth/langsmith/client.py +0 -0
  39. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/auth/middleware.py +0 -0
  40. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/auth/noop.py +0 -0
  41. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/auth/studio_user.py +0 -0
  42. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/cli.py +0 -0
  43. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/command.py +0 -0
  44. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/config.py +0 -0
  45. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/cron_scheduler.py +0 -0
  46. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/errors.py +0 -0
  47. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/executor_entrypoint.py +0 -0
  48. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/feature_flags.py +0 -0
  49. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/graph.py +0 -0
  50. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/http.py +0 -0
  51. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/http_metrics.py +0 -0
  52. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/.gitignore +0 -0
  53. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/.prettierrc +0 -0
  54. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/__init__.py +0 -0
  55. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/base.py +0 -0
  56. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/build.mts +0 -0
  57. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/client.http.mts +0 -0
  58. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/client.mts +0 -0
  59. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/errors.py +0 -0
  60. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/global.d.ts +0 -0
  61. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/package.json +0 -0
  62. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/remote.py +0 -0
  63. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/schema.py +0 -0
  64. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/src/graph.mts +0 -0
  65. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/src/load.hooks.mjs +0 -0
  66. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/src/preload.mjs +0 -0
  67. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/src/utils/files.mts +0 -0
  68. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/src/utils/importMap.mts +0 -0
  69. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
  70. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/src/utils/serde.mts +0 -0
  71. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/sse.py +0 -0
  72. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/traceblock.mts +0 -0
  73. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/tsconfig.json +0 -0
  74. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/ui.py +0 -0
  75. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/yarn.lock +0 -0
  76. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/logging.py +0 -0
  77. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/metadata.py +0 -0
  78. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/middleware/__init__.py +0 -0
  79. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/middleware/http_logger.py +0 -0
  80. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/middleware/private_network.py +0 -0
  81. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/middleware/request_id.py +0 -0
  82. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/models/__init__.py +0 -0
  83. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/models/run.py +0 -0
  84. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/patch.py +0 -0
  85. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/queue_entrypoint.py +0 -0
  86. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/schema.py +0 -0
  87. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/serde.py +0 -0
  88. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/server.py +0 -0
  89. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/sse.py +0 -0
  90. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/state.py +0 -0
  91. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/store.py +0 -0
  92. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/stream.py +0 -0
  93. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/thread_ttl.py +0 -0
  94. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/traceblock.py +0 -0
  95. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/tunneling/cloudflare.py +0 -0
  96. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/utils/__init__.py +0 -0
  97. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/utils/cache.py +0 -0
  98. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/utils/config.py +0 -0
  99. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/utils/future.py +0 -0
  100. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/utils/headers.py +0 -0
  101. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/utils/uuids.py +0 -0
  102. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/utils.py +0 -0
  103. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/validation.py +0 -0
  104. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/webhook.py +0 -0
  105. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/worker.py +0 -0
  106. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_license/__init__.py +0 -0
  107. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_license/validation.py +0 -0
  108. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_runtime/__init__.py +0 -0
  109. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_runtime/checkpoint.py +0 -0
  110. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_runtime/database.py +0 -0
  111. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_runtime/lifespan.py +0 -0
  112. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_runtime/metrics.py +0 -0
  113. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_runtime/ops.py +0 -0
  114. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_runtime/queue.py +0 -0
  115. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_runtime/retry.py +0 -0
  116. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_runtime/store.py +0 -0
  117. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/logging.json +0 -0
  118. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/openapi.json +0 -0
  119. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/pyproject.toml +0 -0
  120. {langgraph_api-0.2.134 → langgraph_api-0.2.135}/scripts/create_license.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: langgraph-api
3
- Version: 0.2.134
3
+ Version: 0.2.135
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,14 +1,22 @@
1
1
  # Benchmark commands
2
2
  benchmark-burst:
3
+ make benchmark-reset
3
4
  k6 run burst.js
4
5
 
5
6
  benchmark-ramp:
7
+ make benchmark-reset
6
8
  k6 run --out json=raw_data_$(shell date +%Y-%m-%dT%H-%M-%S).json ramp.js
7
9
 
8
10
  benchmark-charts:
9
11
  npm install
10
12
  node graphs.js $(shell ls -t raw_data_*.json | head -1) true
11
13
 
14
+ benchmark-reset:
15
+ node clean.js
16
+
17
+ benchmark-new-revision:
18
+ node update-revision.js
19
+
12
20
  benchmark-clean:
13
21
  rm -f results_*.json summary_*.json raw_data_*.json *_chart_*.png
14
22
 
@@ -0,0 +1,87 @@
1
+ /*
2
+ * Delete all threads and runs from the last benchmark run for consistent tests
3
+ * The default benchmark server has a thread TTL of one hour that should clean things up too so this doesn't run too long.
4
+ */
5
+
6
+ // URL of your LangGraph server
7
+ const BASE_URL = process.env.BASE_URL || 'http://localhost:9123';
8
+ // LangSmith API key only needed with a custom server endpoint
9
+ const LANGSMITH_API_KEY = process.env.LANGSMITH_API_KEY;
10
+
11
+ async function clean() {
12
+ const headers = { 'Content-Type': 'application/json' };
13
+ if (LANGSMITH_API_KEY) {
14
+ headers['x-api-key'] = LANGSMITH_API_KEY;
15
+ }
16
+
17
+ const searchUrl = `${BASE_URL}/threads/search`;
18
+ let totalDeleted = 0;
19
+
20
+ try {
21
+ console.log('Starting thread cleanup...');
22
+
23
+ while (true) {
24
+ try {
25
+ // Get the next page of threads
26
+ console.log('Searching for threads...');
27
+ const searchResponse = await fetch(searchUrl, {
28
+ method: 'POST',
29
+ headers,
30
+ body: JSON.stringify({
31
+ limit: 1000
32
+ })
33
+ });
34
+
35
+ if (!searchResponse.ok) {
36
+ throw new Error(`Search request failed: ${searchResponse.status} ${searchResponse.statusText}`);
37
+ }
38
+
39
+ const threads = await searchResponse.json();
40
+
41
+ // If no threads found, we're done
42
+ if (!threads || threads.length === 0) {
43
+ console.log('No more threads found.');
44
+ break;
45
+ }
46
+
47
+ console.log(`Found ${threads.length} threads to delete`);
48
+
49
+ // Delete each thread
50
+ for (const thread of threads) {
51
+ try {
52
+ const deleteUrl = `${BASE_URL}/threads/${thread.thread_id}`;
53
+ const deleteResponse = await fetch(deleteUrl, {
54
+ method: 'DELETE',
55
+ headers
56
+ });
57
+
58
+ if (!deleteResponse.ok) {
59
+ console.error(`Failed to delete thread ${thread.thread_id}: ${deleteResponse.status} ${deleteResponse.statusText}`);
60
+ } else {
61
+ totalDeleted++;
62
+ }
63
+ } catch (deleteError) {
64
+ console.error(`Error deleting thread ${thread.thread_id}:`, deleteError.message);
65
+ }
66
+ }
67
+
68
+ console.log(`Deleted ${threads.length} threads in this batch`);
69
+
70
+ } catch (batchError) {
71
+ console.error('Error in batch processing:', batchError.message);
72
+ break;
73
+ }
74
+ }
75
+
76
+ console.log(`Cleanup completed. Total threads deleted: ${totalDeleted}`);
77
+
78
+ } catch (error) {
79
+ console.error('Fatal error during cleanup:', error.message);
80
+ process.exit(1);
81
+ }
82
+ }
83
+
84
+ clean().catch(error => {
85
+ console.error('Unhandled error:', error.message);
86
+ process.exit(1);
87
+ });
@@ -0,0 +1,148 @@
1
+ /*
2
+ * Trigger a new revision deployment and wait for it to complete
3
+ * This ensures the benchmark instance is running the latest code
4
+ */
5
+
6
+ // LangSmith API endpoints and credentials
7
+ const DEPLOYMENT_ID = process.env.DEPLOYMENT_ID || 'a23f03ff-6d4d-4efd-8149-bb5a7f3b95cf'; // jdr-benchmark deployment id
8
+ const LANGSMITH_API_KEY = process.env.LANGSMITH_API_KEY;
9
+ const API_BASE = 'https://api.host.langchain.com/v1';
10
+
11
+ // Deployment configuration
12
+ const REVISION_CONFIG = {
13
+ repo_path: "langgraph.json",
14
+ env_vars: [
15
+ {
16
+ name: "N_JOBS_PER_WORKER",
17
+ value: "100",
18
+ value_from: "secret",
19
+ type: "secret"
20
+ }
21
+ ],
22
+ shareable: false,
23
+ container_spec: {
24
+ cpu: null,
25
+ memory_mb: null,
26
+ min_scale: 10,
27
+ max_scale: null
28
+ }
29
+ };
30
+
31
+ // Expected deployment statuses in order
32
+ const EXPECTED_STATUSES = ['CREATED', 'AWAITING_BUILD', 'BUILDING', 'AWAITING_DEPLOY', 'DEPLOYING', 'DEPLOYED', 'QUEUED'];
33
+ const FINAL_STATUS = 'DEPLOYED';
34
+ const POLL_INTERVAL = 10000; // 10 seconds
35
+ const MAX_WAIT_TIME = 30 * 60 * 1000; // 30 minutes
36
+
37
+ async function updateRevision() {
38
+ if (!LANGSMITH_API_KEY) {
39
+ console.error('LANGSMITH_API_KEY environment variable is required');
40
+ process.exit(1);
41
+ }
42
+
43
+ const headers = {
44
+ 'Content-Type': 'application/json',
45
+ 'x-api-key': LANGSMITH_API_KEY
46
+ };
47
+
48
+ const createUrl = `${API_BASE}/projects/${DEPLOYMENT_ID}/revisions`;
49
+ const pollUrl = `${API_BASE}/projects/${DEPLOYMENT_ID}/revisions?limit=1&offset=0`;
50
+
51
+ try {
52
+ console.log('Triggering new revision deployment...');
53
+
54
+ // Step 1: Create new revision
55
+ const createResponse = await fetch(createUrl, {
56
+ method: 'POST',
57
+ headers,
58
+ body: JSON.stringify(REVISION_CONFIG)
59
+ });
60
+
61
+ if (createResponse.status === 409) {
62
+ console.log('⚠️ A new revision is already in progress. Continuing to poll existing deployment...');
63
+ } else if (!createResponse.ok) {
64
+ throw new Error(`Failed to create revision: ${createResponse.status} ${createResponse.statusText}`);
65
+ } else {
66
+ const newRevision = await createResponse.json();
67
+ const revisionId = newRevision.resource.latest_revision.hosted_langserve_revision_id;
68
+ console.log(`✓ New revision created: ${revisionId}`);
69
+ console.log(`Initial status: ${newRevision.status}`);
70
+ }
71
+
72
+ // Step 2: Poll until deployment is complete
73
+ console.log('\nPolling deployment status...');
74
+ const startTime = Date.now();
75
+ let lastStatus = null;
76
+
77
+ while (true) {
78
+ let pollResponse;
79
+ try {
80
+ pollResponse = await fetch(pollUrl, {
81
+ method: 'GET',
82
+ headers
83
+ });
84
+
85
+ if (!pollResponse.ok) {
86
+ throw new Error(`Failed to poll revisions: ${pollResponse.status} ${pollResponse.statusText}`);
87
+ }
88
+ } catch (pollError) {
89
+ console.error('Error calling poll endpoint (will retry):', pollError.message);
90
+ // Wait before next poll and continue
91
+ await new Promise(resolve => setTimeout(resolve, POLL_INTERVAL));
92
+ continue;
93
+ }
94
+
95
+ // Parse response and handle deployment logic (these errors should still be thrown)
96
+ const revisions = await pollResponse.json();
97
+
98
+ if (!revisions || revisions.length === 0) {
99
+ throw new Error('No revisions found');
100
+ }
101
+
102
+ const latestRevision = revisions[0];
103
+ const currentStatus = latestRevision.status;
104
+
105
+ // Log status changes
106
+ if (currentStatus !== lastStatus) {
107
+ const timestamp = new Date().toISOString();
108
+ console.log(`[${timestamp}] Status: ${currentStatus}`);
109
+
110
+ if (latestRevision.status_message) {
111
+ console.log(` Message: ${latestRevision.status_message}`);
112
+ }
113
+
114
+ lastStatus = currentStatus;
115
+ }
116
+
117
+ // Check if deployment is complete
118
+ if (currentStatus === FINAL_STATUS) {
119
+ console.log(`\n✓ Deployment completed successfully!`);
120
+ console.log(`Revision ID: ${latestRevision.id}`);
121
+ console.log(`Total time: ${Math.round((Date.now() - startTime) / 1000)}s`);
122
+ break;
123
+ }
124
+
125
+ // Check for failure statuses
126
+ if (!EXPECTED_STATUSES.includes(currentStatus)) {
127
+ throw new Error(`Deployment failed with status: ${currentStatus}${latestRevision.status_message ? ` - ${latestRevision.status_message}` : ''}`);
128
+ }
129
+
130
+ // Check timeout
131
+ if (Date.now() - startTime > MAX_WAIT_TIME) {
132
+ throw new Error(`Deployment timeout after ${MAX_WAIT_TIME / 60000} minutes. Last status: ${currentStatus}`);
133
+ }
134
+
135
+ // Wait before next poll
136
+ await new Promise(resolve => setTimeout(resolve, POLL_INTERVAL));
137
+ }
138
+
139
+ } catch (error) {
140
+ console.error('Fatal error during revision update:', error.message);
141
+ process.exit(1);
142
+ }
143
+ }
144
+
145
+ updateRevision().catch(error => {
146
+ console.error('Unhandled error:', error.message);
147
+ process.exit(1);
148
+ });
@@ -0,0 +1 @@
1
+ __version__ = "0.2.135"
@@ -97,7 +97,8 @@ class ApiRoute(Route):
97
97
  include_in_schema: bool = True,
98
98
  middleware: typing.Sequence[Middleware] | None = None,
99
99
  ) -> None:
100
- assert path.startswith("/"), "Routed paths must start with '/'"
100
+ if not path.startswith("/"):
101
+ raise ValueError("Routed paths must start with '/'")
101
102
  self.path = path
102
103
  self.endpoint = endpoint
103
104
  self.name = get_name(endpoint) if name is None else name
@@ -568,15 +568,15 @@ dev = [
568
568
 
569
569
  [[package]]
570
570
  name = "langgraph-sdk"
571
- version = "0.2.0"
571
+ version = "0.2.2"
572
572
  source = { registry = "https://pypi.org/simple" }
573
573
  dependencies = [
574
574
  { name = "httpx" },
575
575
  { name = "orjson" },
576
576
  ]
577
- sdist = { url = "https://files.pythonhosted.org/packages/2a/3e/3dc45dc7682c9940db9edaf8773d2e157397c5bd6881f6806808afd8731e/langgraph_sdk-0.2.0.tar.gz", hash = "sha256:cd8b5f6595e5571be5cbffd04cf936978ab8f5d1005517c99715947ef871e246", size = 72510, upload-time = "2025-07-22T17:31:06.745Z" }
577
+ sdist = { url = "https://files.pythonhosted.org/packages/4d/3a/ea929b5b3827615802f020abdaa6d4a6f9d59ab764f65559fa6f87a6dda6/langgraph_sdk-0.2.2.tar.gz", hash = "sha256:9484e8071953df75d7aaf9845d82db3595e485af7d5dcc235c9b32c52362e1fc", size = 77981, upload-time = "2025-08-18T19:25:42.596Z" }
578
578
  wheels = [
579
- { url = "https://files.pythonhosted.org/packages/a5/03/a8ab0e8ea74be6058cb48bb1d85485b5c65d6ea183e3ee1aa8ca1ac73b3e/langgraph_sdk-0.2.0-py3-none-any.whl", hash = "sha256:150722264f225c4d47bbe7394676be102fdbf04c4400a0dd1bd41a70c6430cc7", size = 50569, upload-time = "2025-07-22T17:31:04.582Z" },
579
+ { url = "https://files.pythonhosted.org/packages/01/0d/dfa633c6b85e973e7d4383e9b92603b7e910e89768411daeb7777bfbae04/langgraph_sdk-0.2.2-py3-none-any.whl", hash = "sha256:1afbec01ade166f8b6ce18782875415422eb70dcb82852aeaa373e6152db4b82", size = 52017, upload-time = "2025-08-18T19:25:40.567Z" },
580
580
  ]
581
581
 
582
582
  [[package]]
@@ -1006,7 +1006,7 @@ wheels = [
1006
1006
 
1007
1007
  [[package]]
1008
1008
  name = "requests"
1009
- version = "2.32.4"
1009
+ version = "2.32.5"
1010
1010
  source = { registry = "https://pypi.org/simple" }
1011
1011
  dependencies = [
1012
1012
  { name = "certifi" },
@@ -1014,9 +1014,9 @@ dependencies = [
1014
1014
  { name = "idna" },
1015
1015
  { name = "urllib3" },
1016
1016
  ]
1017
- sdist = { url = "https://files.pythonhosted.org/packages/e1/0a/929373653770d8a0d7ea76c37de6e41f11eb07559b103b1c02cafb3f7cf8/requests-2.32.4.tar.gz", hash = "sha256:27d0316682c8a29834d3264820024b62a36942083d52caf2f14c0591336d3422", size = 135258, upload-time = "2025-06-09T16:43:07.34Z" }
1017
+ sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" }
1018
1018
  wheels = [
1019
- { url = "https://files.pythonhosted.org/packages/7c/e4/56027c4a6b4ae70ca9de302488c5ca95ad4a39e190093d6c1a8ace08341b/requests-2.32.4-py3-none-any.whl", hash = "sha256:27babd3cda2a6d50b30443204ee89830707d396671944c998b5975b031ac2b2c", size = 64847, upload-time = "2025-06-09T16:43:05.728Z" },
1019
+ { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" },
1020
1020
  ]
1021
1021
 
1022
1022
  [[package]]
@@ -1 +0,0 @@
1
- __version__ = "0.2.134"
File without changes