69 lines
2.5 KiB
TypeScript
69 lines
2.5 KiB
TypeScript
import { describe, expect, test, beforeEach, afterEach } from 'bun:test'
|
|
import { resolveOpenAIModel } from '../modelMapping.js'
|
|
|
|
describe('resolveOpenAIModel', () => {
|
|
const originalEnv = {
|
|
OPENAI_MODEL: process.env.OPENAI_MODEL,
|
|
OPENAI_DEFAULT_HAIKU_MODEL: process.env.OPENAI_DEFAULT_HAIKU_MODEL,
|
|
OPENAI_DEFAULT_SONNET_MODEL: process.env.OPENAI_DEFAULT_SONNET_MODEL,
|
|
OPENAI_DEFAULT_OPUS_MODEL: process.env.OPENAI_DEFAULT_OPUS_MODEL,
|
|
ANTHROPIC_DEFAULT_HAIKU_MODEL: process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL,
|
|
ANTHROPIC_DEFAULT_SONNET_MODEL: process.env.ANTHROPIC_DEFAULT_SONNET_MODEL,
|
|
ANTHROPIC_DEFAULT_OPUS_MODEL: process.env.ANTHROPIC_DEFAULT_OPUS_MODEL,
|
|
}
|
|
|
|
beforeEach(() => {
|
|
delete process.env.OPENAI_MODEL
|
|
delete process.env.OPENAI_DEFAULT_HAIKU_MODEL
|
|
delete process.env.OPENAI_DEFAULT_SONNET_MODEL
|
|
delete process.env.OPENAI_DEFAULT_OPUS_MODEL
|
|
delete process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL
|
|
delete process.env.ANTHROPIC_DEFAULT_SONNET_MODEL
|
|
delete process.env.ANTHROPIC_DEFAULT_OPUS_MODEL
|
|
})
|
|
|
|
afterEach(() => {
|
|
Object.assign(process.env, originalEnv)
|
|
})
|
|
|
|
test('OPENAI_MODEL env var overrides all', () => {
|
|
process.env.OPENAI_MODEL = 'my-custom-model'
|
|
expect(resolveOpenAIModel('claude-sonnet-4-6')).toBe('my-custom-model')
|
|
})
|
|
|
|
test('ANTHROPIC_DEFAULT_SONNET_MODEL overrides default map', () => {
|
|
process.env.ANTHROPIC_DEFAULT_SONNET_MODEL = 'my-sonnet'
|
|
expect(resolveOpenAIModel('claude-sonnet-4-6')).toBe('my-sonnet')
|
|
})
|
|
|
|
test('ANTHROPIC_DEFAULT_HAIKU_MODEL overrides default map', () => {
|
|
process.env.ANTHROPIC_DEFAULT_HAIKU_MODEL = 'my-haiku'
|
|
expect(resolveOpenAIModel('claude-haiku-4-5-20251001')).toBe('my-haiku')
|
|
})
|
|
|
|
test('ANTHROPIC_DEFAULT_OPUS_MODEL overrides default map', () => {
|
|
process.env.ANTHROPIC_DEFAULT_OPUS_MODEL = 'my-opus'
|
|
expect(resolveOpenAIModel('claude-opus-4-6')).toBe('my-opus')
|
|
})
|
|
|
|
test('maps known Anthropic model via DEFAULT_MODEL_MAP', () => {
|
|
expect(resolveOpenAIModel('claude-sonnet-4-6')).toBe('gpt-4o')
|
|
})
|
|
|
|
test('maps haiku model', () => {
|
|
expect(resolveOpenAIModel('claude-haiku-4-5-20251001')).toBe('gpt-4o-mini')
|
|
})
|
|
|
|
test('maps opus model', () => {
|
|
expect(resolveOpenAIModel('claude-opus-4-6')).toBe('o3')
|
|
})
|
|
|
|
test('passes through unknown model name', () => {
|
|
expect(resolveOpenAIModel('some-random-model')).toBe('some-random-model')
|
|
})
|
|
|
|
test('strips [1m] suffix', () => {
|
|
expect(resolveOpenAIModel('claude-sonnet-4-6[1m]')).toBe('gpt-4o')
|
|
})
|
|
})
|