Files
Jyotisha/frontend/src/lib/consult/prep-flags.ts
T
jesse-uxandGrok (agent loop) a0e223e20c 发问准备可以并行,三个开关先保持关闭(BUG-1337~1339)
开流前的注销检查可以和读会话、解析模型同时进行;审核改到扣点前等待,不再挡住第一行;模型版本可以短缓存;两个领域可以一起算。本机没有数据库中位数,也没有带星盘网络库的镜像,所以默认仍是关闭、缓存 0、领域逐个算。

自测:tsc 0 错;lint 0 error;相关测试失败 0、取消 0。test:db 未跑。

Co-Authored-By: Grok (agent loop)
2026-10-14 07:23:58 +08:00

63 lines
1.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/** Call-time switches for consult preparation. Read on each request, not at import. */
const warned = new Set<string>();
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<Record<string, string | undefined>>, 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<Record<string, string | undefined>> = 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<Record<string, string | undefined>> = 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<Record<string, string | undefined>> = 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();
}