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

  1. Check the cluster state in the Zilliz/Milvus console and resume it if paused
  2. Regenerate/verify ZILLIZ_API_TOKEN and confirm ZILLIZ_ENDPOINT matches the console's connection info exactly
  3. Probe reachability from the app host (curl https://<endpoint>/health or a Milvus health check) to rule out network/firewall
  4. 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

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


AI-assisted analysis of Mintplex-Labs/anything-llm@3aec848f28 (2026-08-18). Data as JSON: /api/errors/9592cb5243a9ca5b. Report an issue: GitHub.