Environment
@qdrant/js-client-rest: 1.17.0
undici: 6.24.1
- Node.js: v20.20.2
- Runtime: Docker container (node:20-alpine)
- Qdrant Cloud cluster: AWS us-east-1
What happened
When calling client.upsert() with inference vectors (vector: { text, model }),
the request hangs indefinitely inside a Docker container and never resolves or rejects.
No timeout is triggered — the Promise simply never settles.
The same request works correctly when:
- Made from the host machine via
curl (HTTP/1.1) — completes in ~86ms ✅
- Made from inside the Docker container via Node.js
https.request (HTTP/1.1) — completes in ~222ms ✅
- Made from the host machine via
curl --http2 — also hangs ❌
This points to an HTTP/2 connection issue specific to how undici negotiates
the connection with Qdrant Cloud's inference endpoint inside Docker networking.
Minimal reproduction
import { QdrantClient } from "@qdrant/js-client-rest";
const client = new QdrantClient({
url: "https://<cluster>.qdrant.io:6333",
apiKey: "<token>",
});
// Hangs forever inside Docker — never resolves or rejects
await client.upsert("my-collection", {
wait: true,
points: [{
id: "11111111-1111-1111-1111-111111111111",
vector: { text: "hello world", model: "intfloat/multilingual-e5-small" },
payload: { text: "hello" },
}],
});
Workaround
Using Node.js https.request directly (HTTP/1.1) works correctly:
const https = require("https");
// PUT to /collections/{name}/points?wait=true with same JSON body
// → returns 200 in ~222ms
Expected behavior
client.upsert() should complete or throw within a reasonable timeout when
Cloud Inference is enabled, regardless of whether HTTP/2 or HTTP/1.1 is used.
Additional context
- Regular upserts with pre-computed float vectors (no inference) work fine via the SDK
- The issue is specific to inference vectors (vector: { text, model })
- Qdrant Cloud cluster is reachable and inference works correctly via REST curl
- Docker DNS is set to 8.8.8.8 / 1.1.1.1 (not the issue)
Environment
@qdrant/js-client-rest: 1.17.0undici: 6.24.1What happened
When calling
client.upsert()with inference vectors (vector: { text, model }),the request hangs indefinitely inside a Docker container and never resolves or rejects.
No timeout is triggered — the Promise simply never settles.
The same request works correctly when:
curl(HTTP/1.1) — completes in ~86ms ✅https.request(HTTP/1.1) — completes in ~222ms ✅curl --http2— also hangs ❌This points to an HTTP/2 connection issue specific to how
undicinegotiatesthe connection with Qdrant Cloud's inference endpoint inside Docker networking.
Minimal reproduction
Workaround
Using Node.js https.request directly (HTTP/1.1) works correctly:
Expected behavior
client.upsert() should complete or throw within a reasonable timeout when
Cloud Inference is enabled, regardless of whether HTTP/2 or HTTP/1.1 is used.
Additional context