File size: 2,240 Bytes
a0ebf39 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
describe('resolveEvalModel', () => {
const ORIG_ENV = process.env;
beforeEach(() => {
process.env = { ...ORIG_ENV };
vi.resetModules();
});
afterEach(() => {
process.env = ORIG_ENV;
vi.restoreAllMocks();
});
it('throws a helpful error when env var is unset and no fallback is given', async () => {
delete process.env.EVAL_FOO_MODEL;
vi.doMock('@/lib/server/resolve-model', () => ({
resolveModel: vi.fn(),
}));
const { resolveEvalModel } = await import('@/eval/shared/resolve-model');
await expect(resolveEvalModel('EVAL_FOO_MODEL')).rejects.toThrow(/EVAL_FOO_MODEL/);
});
it('uses the env var when set', async () => {
process.env.EVAL_FOO_MODEL = 'openai:gpt-4.1';
const resolveModel = vi.fn().mockResolvedValue({ model: 'resolved', modelInfo: {} });
vi.doMock('@/lib/server/resolve-model', () => ({ resolveModel }));
const { resolveEvalModel } = await import('@/eval/shared/resolve-model');
await resolveEvalModel('EVAL_FOO_MODEL');
expect(resolveModel).toHaveBeenCalledWith({ modelString: 'openai:gpt-4.1' });
});
it('uses the explicit fallback when env var is unset', async () => {
delete process.env.EVAL_FOO_MODEL;
const resolveModel = vi.fn().mockResolvedValue({ model: 'resolved', modelInfo: {} });
vi.doMock('@/lib/server/resolve-model', () => ({ resolveModel }));
const { resolveEvalModel } = await import('@/eval/shared/resolve-model');
await resolveEvalModel('EVAL_FOO_MODEL', 'google:gemini-2.5-flash');
expect(resolveModel).toHaveBeenCalledWith({ modelString: 'google:gemini-2.5-flash' });
});
it('env var takes precedence over fallback', async () => {
process.env.EVAL_FOO_MODEL = 'anthropic:claude-haiku-4-5';
const resolveModel = vi.fn().mockResolvedValue({ model: 'resolved', modelInfo: {} });
vi.doMock('@/lib/server/resolve-model', () => ({ resolveModel }));
const { resolveEvalModel } = await import('@/eval/shared/resolve-model');
await resolveEvalModel('EVAL_FOO_MODEL', 'google:gemini-2.5-flash');
expect(resolveModel).toHaveBeenCalledWith({ modelString: 'anthropic:claude-haiku-4-5' });
});
});
|