Files
t3mp3st/src/__tests__/litellm-provider.test.ts
T
Joseph Magly 5a12593baa Merge remote-tracking branch 'upstream/main' into pr-45
# Conflicts:
#	src/config/index.ts
#	src/types/index.ts
2026-07-16 12:11:16 -04:00

45 lines
1.8 KiB
TypeScript

import { afterEach, describe, expect, it } from 'vitest';
import { config, AVAILABLE_MODELS } from '../config/index.js';
import { createLiteLLMBackbone } from '../llm/index.js';
const PREV_BASE = process.env.LITELLM_BASE_URL;
const PREV_KEY = process.env.LITELLM_API_KEY;
const PREV_MODEL = process.env.LITELLM_MODEL;
describe('LiteLLM provider wiring (#45)', () => {
afterEach(() => {
if (PREV_BASE === undefined) delete process.env.LITELLM_BASE_URL;
else process.env.LITELLM_BASE_URL = PREV_BASE;
if (PREV_KEY === undefined) delete process.env.LITELLM_API_KEY;
else process.env.LITELLM_API_KEY = PREV_KEY;
if (PREV_MODEL === undefined) delete process.env.LITELLM_MODEL;
else process.env.LITELLM_MODEL = PREV_MODEL;
});
it('resolves LiteLLM as an OpenAI-compatible proxy from env without requiring a key', () => {
process.env.LITELLM_BASE_URL = 'http://localhost:4000/v1';
delete process.env.LITELLM_API_KEY;
process.env.LITELLM_MODEL = 'anthropic/claude-sonnet-4.5';
const cfg = config.getLLMConfig('litellm');
expect(cfg.provider).toBe('litellm');
expect(cfg.baseUrl).toBe('http://localhost:4000/v1');
expect(cfg.model).toBe('anthropic/claude-sonnet-4.5');
expect(cfg.apiKey).toBeUndefined();
expect(config.getConfiguredProviders()).toContain('litellm');
});
it('the LiteLLM backbone validates when only a proxy base URL is configured', () => {
process.env.LITELLM_BASE_URL = 'http://localhost:4000/v1';
const backbone = createLiteLLMBackbone();
expect(backbone.getProvider()).toBe('litellm');
expect(backbone.validateConfig().valid).toBe(true);
});
it('surfaces a static LiteLLM model catalog entry', () => {
expect(AVAILABLE_MODELS.litellm?.length ?? 0).toBeGreaterThan(0);
expect(AVAILABLE_MODELS.litellm[0].provider).toBe('LiteLLM');
});
});