/** Call-time switches for consult preparation. Read on each request, not at import. */ const warned = new Set(); function warnOnce(name: string, raw: string): void { if (warned.has(name)) return; warned.add(name); console.warn(`[consult-prep] ${name} 的值无法识别,按默认处理`); void raw; } function readRaw(env: Readonly>, name: string): string | undefined { const raw = env[name]; if (raw === undefined) return undefined; const trimmed = raw.trim(); return trimmed ? trimmed : undefined; } export function consultPrepParallelEnabled( env: Readonly> = process.env, ): boolean { const raw = readRaw(env, "CONSULT_PREP_PARALLEL"); if (raw === undefined) return false; const value = raw.toLowerCase(); if (value === "on") return true; if (value === "off") return false; warnOnce("CONSULT_PREP_PARALLEL", raw); return false; } /** 0 closes the cache. Anything outside 0–15000 stays on the default, which is off. */ export function modelVersionCacheTtlMs( env: Readonly> = process.env, ): number { const raw = readRaw(env, "MODEL_VERSION_CACHE_TTL_MS"); if (raw === undefined) return 0; if (!/^\d+$/.test(raw)) { warnOnce("MODEL_VERSION_CACHE_TTL_MS", raw); return 0; } const parsed = Number(raw); if (parsed > 15_000) { warnOnce("MODEL_VERSION_CACHE_TTL_MS", raw); return 0; } return parsed; } /** 1 is today's serial loop. 2 starts the capped domains together. */ export function consultDomainConcurrency( env: Readonly> = process.env, ): 1 | 2 { const raw = readRaw(env, "CONSULT_DOMAIN_CONCURRENCY"); if (raw === undefined || raw === "1") return 1; if (raw === "2") return 2; warnOnce("CONSULT_DOMAIN_CONCURRENCY", raw); return 1; } export function resetConsultPrepFlagWarningsForTests(): void { warned.clear(); }