| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- import { openai } from '@ai-sdk/openai'
- import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'
- import * as bedrockModule from './bedrock'
- import { getModel } from './model'
- import { DEFAULT_COMPLETION_MODEL, openaiModelEntry } from './model.utils'
- vi.mock('@ai-sdk/openai', () => ({
- openai: vi.fn(() => 'openai-model'),
- }))
- vi.mock('./bedrock', async () => ({
- ...(await vi.importActual('./bedrock')),
- createRoutedBedrock: vi.fn(() => async (_modelId: string) => 'bedrock-model'),
- checkAwsCredentials: vi.fn(),
- }))
- describe('getModel', () => {
- const originalEnv = { ...process.env }
- beforeEach(() => {
- vi.resetAllMocks()
- })
- afterEach(() => {
- process.env = { ...originalEnv }
- })
- it('returns bedrock model without systemProviderOptions', async () => {
- vi.mocked(bedrockModule.checkAwsCredentials).mockResolvedValue(true)
- vi.stubEnv('AWS_BEDROCK_ROLE_ARN', 'test')
- const { modelParams, error, systemProviderOptions } = await getModel({
- provider: 'bedrock',
- routingKey: 'test',
- })
- expect(modelParams?.model).toEqual('bedrock-model')
- expect(systemProviderOptions).toBeUndefined()
- expect(error).toBeUndefined()
- })
- it('returns error when bedrock credentials are not available', async () => {
- vi.mocked(bedrockModule.checkAwsCredentials).mockResolvedValue(false)
- const { error } = await getModel({ provider: 'bedrock', routingKey: 'test' })
- expect(error).toBeDefined()
- })
- it('returns openai model with default model', async () => {
- vi.stubEnv('OPENAI_API_KEY', 'test-key')
- const { modelParams, systemProviderOptions } = await getModel({
- provider: 'openai',
- modelEntry: openaiModelEntry({ id: 'gpt-5.4-nano' }),
- })
- expect(modelParams?.model).toEqual('openai-model')
- expect(openai).toHaveBeenCalledWith('gpt-5.4-nano')
- expect(systemProviderOptions).toBeUndefined()
- })
- it('returns error when OPENAI_API_KEY is not available', async () => {
- vi.stubEnv('OPENAI_API_KEY', '')
- const { error } = await getModel({
- provider: 'openai',
- modelEntry: openaiModelEntry({ id: 'gpt-5.4-nano' }),
- })
- expect(error).toEqual(new Error('OPENAI_API_KEY not available'))
- })
- it('returns openai gpt-5.3-codex when hasAccessToAdvanceModel and not throttled', async () => {
- vi.stubEnv('OPENAI_API_KEY', 'test-key')
- vi.stubEnv('IS_THROTTLED', 'false')
- const { modelParams, error } = await getModel({
- provider: 'openai',
- modelEntry: openaiModelEntry({ id: 'gpt-5.3-codex', reasoningEffort: 'low' }),
- })
- expect(error).toBeUndefined()
- expect(modelParams?.model).toEqual('openai-model')
- expect(openai).toHaveBeenCalledWith('gpt-5.3-codex')
- expect(modelParams?.providerOptions?.openai?.reasoningEffort).toBe('low')
- })
- it('applies reasoningEffort from DEFAULT_COMPLETION_MODEL', async () => {
- vi.stubEnv('OPENAI_API_KEY', 'test-key')
- const { modelParams, error } = await getModel({
- provider: 'openai',
- modelEntry: DEFAULT_COMPLETION_MODEL,
- })
- expect(error).toBeUndefined()
- expect(openai).toHaveBeenCalledWith('gpt-5.4-nano')
- expect(modelParams?.providerOptions?.openai?.reasoningEffort).toBe('none')
- })
- })
|