Files
brain/tools/llm-judge-config.test.mjs
T

76 lines
3.1 KiB
JavaScript

// tools/llm-judge-config.test.mjs
// Router-gate v4 Layer 4 enabling-gate. The judge is OFF by default and only
// becomes enabled when BOTH an explicit flag is set AND a key is resolvable.
// Building this switch does NOT flip it — no key + no flag => disabled.
import { describe, it, expect } from 'vitest';
import { resolveJudgeConfig } from './llm-judge-config.mjs';
describe('llm-judge-config resolveJudgeConfig()', () => {
it('is DISABLED by default: no flag, no key', () => {
const c = resolveJudgeConfig({ env: {}, keychainGet: () => null });
expect(c.enabled).toBe(false);
expect(c.apiKey).toBe(null);
});
it('stays DISABLED when a key exists but the enable flag is not set', () => {
const c = resolveJudgeConfig({ env: {}, keychainGet: () => 'sk-test' });
expect(c.enabled).toBe(false);
expect(c.apiKey).toBe('sk-test');
});
it('stays DISABLED when the flag is set but no key is resolvable', () => {
const c = resolveJudgeConfig({ env: { ROUTER_LLM_JUDGE_ENABLED: '1' }, keychainGet: () => null });
expect(c.enabled).toBe(false);
expect(c.apiKey).toBe(null);
});
it('is ENABLED only when the flag is set AND a key is resolvable (from keychain)', () => {
const c = resolveJudgeConfig({ env: { ROUTER_LLM_JUDGE_ENABLED: '1' }, keychainGet: () => 'sk-keychain' });
expect(c.enabled).toBe(true);
expect(c.apiKey).toBe('sk-keychain');
});
it('prefers the keychain key over the env fallback', () => {
const c = resolveJudgeConfig({
env: { ROUTER_LLM_JUDGE_ENABLED: '1', ROUTER_LLM_KEY: 'sk-env' },
keychainGet: () => 'sk-keychain',
});
expect(c.apiKey).toBe('sk-keychain');
});
it('falls back to the env key when the keychain is empty', () => {
const c = resolveJudgeConfig({
env: { ROUTER_LLM_JUDGE_ENABLED: '1', ROUTER_LLM_KEY: 'sk-env' },
keychainGet: () => null,
});
expect(c.enabled).toBe(true);
expect(c.apiKey).toBe('sk-env');
});
it('accepts "true" (case-insensitive) as the enable flag', () => {
const c = resolveJudgeConfig({ env: { ROUTER_LLM_JUDGE_ENABLED: 'TRUE' }, keychainGet: () => 'k' });
expect(c.enabled).toBe(true);
});
it('treats an arbitrary flag value (e.g. "0", "no") as NOT enabled', () => {
expect(resolveJudgeConfig({ env: { ROUTER_LLM_JUDGE_ENABLED: '0' }, keychainGet: () => 'k' }).enabled).toBe(false);
expect(resolveJudgeConfig({ env: { ROUTER_LLM_JUDGE_ENABLED: 'no' }, keychainGet: () => 'k' }).enabled).toBe(false);
});
it('exposes default models and passes through baseUrl from env', () => {
const c = resolveJudgeConfig({
env: { ROUTER_LLM_JUDGE_ENABLED: '1', ROUTER_LLM_BASE_URL: 'https://example/api' },
keychainGet: () => 'k',
});
expect(Array.isArray(c.models)).toBe(true);
expect(c.models.length).toBeGreaterThan(0);
expect(c.baseUrl).toBe('https://example/api');
});
it('never throws when keychainGet itself throws — degrades to no key, disabled', () => {
const c = resolveJudgeConfig({ env: { ROUTER_LLM_JUDGE_ENABLED: '1' }, keychainGet: () => { throw new Error('keychain locked'); } });
expect(c.enabled).toBe(false);
expect(c.apiKey).toBe(null);
});
});