/** * @module embeddings/deterministicEmbedMode * @description Single source of truth for "use deterministic test embeddings". * * Brainy's embedding model is a real WASM transformer — correct, but slow on CPU * (a forward pass per text). For TEST tiers that exercise database *logic* (HNSW * build + search, graph traversal, metadata filtering, transactions, storage, * VFS, find composition), the embedding's semantic *quality* is irrelevant; only * a deterministic, content-derived vector is needed. Switching the embedder to a * deterministic stand-in keeps every other code path real while turning a * multi-hour suite into a sub-minute, gateable one. Semantic quality and the * real embedding pipeline are covered separately by the real-model test tier. * * This flag is honored ONLY outside production: {@link EmbeddingManager} throws * if it is set while `NODE_ENV=production` (mock vectors in prod is a security * risk). Enabled by env var or global so test setup files can opt in per tier. */ interface DeterministicEmbedGlobals { __BRAINY_DETERMINISTIC_EMBED__?: boolean /** Legacy alias — the original unit-test-only spelling. */ __BRAINY_UNIT_TEST__?: boolean } /** * @description Whether the deterministic test embedder should be used instead of * the real WASM model. True when `BRAINY_DETERMINISTIC_EMBEDDINGS=true` or the * legacy `BRAINY_UNIT_TEST=true` env var is set, or the matching global is set. * @returns `true` to use deterministic embeddings, `false` for the real model. */ export function isDeterministicEmbedMode(): boolean { const g = globalThis as DeterministicEmbedGlobals return ( process.env.BRAINY_DETERMINISTIC_EMBEDDINGS === 'true' || process.env.BRAINY_UNIT_TEST === 'true' || g.__BRAINY_DETERMINISTIC_EMBED__ === true || g.__BRAINY_UNIT_TEST__ === true ) }