Mintplex-Labs/anything-llm · error · Error
${this.name}::Invalid Heartbeat received - is the instance o
Error message
${this.name}::Invalid Heartbeat received - is the instance online? What it means
Zilliz provider (Milvus SDK). connect() builds a MilvusClient with ZILLIZ_ENDPOINT/ZILLIZ_API_TOKEN and calls client.checkHealth(); when the probe reports isHealthy false this templated error ("Zilliz::Invalid Heartbeat received...") is thrown — the SDK could ask, but the cluster answered unhealthy.
Source
Thrown at server/utils/vectorDbProviders/zilliz/index.js:28
super();
}
get name() {
return "Zilliz";
}
async connect() {
if (process.env.VECTOR_DB !== "zilliz")
throw new Error(`${this.name}::Invalid ENV settings`);
const client = new MilvusClient({
address: process.env.ZILLIZ_ENDPOINT,
token: process.env.ZILLIZ_API_TOKEN,
});
const { isHealthy } = await client.checkHealth();
if (!isHealthy)
throw new Error(
`${this.name}::Invalid Heartbeat received - is the instance online?`
);
return { client };
}
}
module.exports.Zilliz = Zilliz;
View on GitHub (pinned to 3aec848f28)
Solutions
- Check the cluster state in the Zilliz/Milvus console and resume it if paused
- Regenerate/verify ZILLIZ_API_TOKEN and confirm ZILLIZ_ENDPOINT matches the console's connection info exactly
- Probe reachability from the app host (curl https://<endpoint>/health or a Milvus health check) to rule out network/firewall
- For self-hosted Milvus, wait until all dependencies report healthy before starting/retrying AnythingLLM
Defensive patterns
Strategy: retry
Validate before calling
async function zillizReachable(endpoint) {
try {
const res = await fetch(`${endpoint.replace(/\/$/, "")}/health`);
return res.ok;
} catch { return false; }
}
if (!(await zillizReachable(process.env.ZILLIZ_ENDPOINT)))
throw new Error("Zilliz endpoint unreachable — check cluster state/paused tier"); Try / catch
let lastErr;
for (let i = 0; i < 3; i++) {
try { return await zilliz.connect(); }
catch (e) {
lastErr = e;
if (!/Heartbeat/.test(e.message)) throw e;
await delay(1000 * (i + 1)); // cluster may be resuming
}
}
throw lastErr; Prevention
- Keep Zilliz clusters on a paid/always-on tier or expect resume-on-first-traffic latency and retry accordingly
- Wrap every long job with a health preflight so a paused cluster fails fast with a clear cause
- Rotate tokens through the same env var the app reads and restart after updates
When it happens
Trigger: ZILLIZ_ENDPOINT unreachable or mistyped; cluster paused/hibernated (typical of Zilliz Cloud free tier); invalid/expired ZILLIZ_API_TOKEN making the health call fail; self-hosted Milvus internal dependencies (etcd/MinIO) down; network egress blocked to the endpoint.
Common situations: Zilliz Cloud free cluster auto-paused after inactivity; token rotated but .env not updated; self-hosted Milvus still starting up; firewall blocking ports 443/19530; endpoint copied with a typo or extra path.
Related errors
- Weaviate::Invalid Alive signal received - is the service onl
- Ollama service could not be reached. Is Ollama running?
- Type "${type}" is not a valid type to sync.
- LMStudio service could not be reached. Is LMStudio running?
- AstraDB:getOrCreateCollection Unable to infer vector dimensi
AI-assisted analysis of Mintplex-Labs/anything-llm@3aec848f28 (2026-08-18).
Data as JSON: /api/errors/9592cb5243a9ca5b.
Report an issue: GitHub.