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.
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/PKG-INFO +1 -1
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/benchmark/Makefile +8 -0
- langgraph_api-0.2.135/benchmark/clean.js +87 -0
- langgraph_api-0.2.135/benchmark/update-revision.js +148 -0
- langgraph_api-0.2.135/langgraph_api/__init__.py +1 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/route.py +2 -1
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/uv.lock +6 -6
- langgraph_api-0.2.134/langgraph_api/__init__.py +0 -1
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/.gitignore +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/LICENSE +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/Makefile +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/README.md +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/benchmark/.gitignore +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/benchmark/README.md +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/benchmark/burst.js +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/benchmark/graphs.js +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/benchmark/package.json +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/benchmark/ramp.js +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/benchmark/weather.js +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/constraints.txt +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/forbidden.txt +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/healthcheck.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/api/__init__.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/api/assistants.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/api/mcp.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/api/meta.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/api/openapi.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/api/runs.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/api/store.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/api/threads.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/api/ui.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/asgi_transport.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/asyncio.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/auth/__init__.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/auth/custom.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/auth/langsmith/__init__.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/auth/langsmith/backend.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/auth/langsmith/client.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/auth/middleware.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/auth/noop.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/auth/studio_user.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/cli.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/command.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/config.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/cron_scheduler.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/errors.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/executor_entrypoint.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/feature_flags.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/graph.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/http.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/http_metrics.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/.gitignore +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/.prettierrc +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/__init__.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/base.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/build.mts +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/client.http.mts +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/client.mts +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/errors.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/global.d.ts +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/package.json +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/remote.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/schema.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/src/graph.mts +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/src/load.hooks.mjs +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/src/preload.mjs +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/src/utils/files.mts +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/src/utils/importMap.mts +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/src/utils/pythonSchemas.mts +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/src/utils/serde.mts +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/sse.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/traceblock.mts +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/tsconfig.json +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/ui.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/yarn.lock +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/logging.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/metadata.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/middleware/__init__.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/middleware/http_logger.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/middleware/private_network.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/middleware/request_id.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/models/__init__.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/models/run.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/patch.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/queue_entrypoint.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/schema.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/serde.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/server.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/sse.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/state.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/store.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/stream.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/thread_ttl.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/traceblock.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/tunneling/cloudflare.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/utils/__init__.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/utils/cache.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/utils/config.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/utils/future.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/utils/headers.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/utils/uuids.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/utils.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/validation.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/webhook.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/worker.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_license/__init__.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_license/validation.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_runtime/__init__.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_runtime/checkpoint.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_runtime/database.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_runtime/lifespan.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_runtime/metrics.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_runtime/ops.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_runtime/queue.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_runtime/retry.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_runtime/store.py +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/logging.json +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/openapi.json +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/pyproject.toml +0 -0
- {langgraph_api-0.2.134 → langgraph_api-0.2.135}/scripts/create_license.py +0 -0
|
@@ -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
|
-
|
|
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.
|
|
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/
|
|
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/
|
|
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.
|
|
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/
|
|
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/
|
|
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
|
|
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
|
{langgraph_api-0.2.134 → langgraph_api-0.2.135}/langgraph_api/js/src/utils/pythonSchemas.mts
RENAMED
|
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
|