@ai-stack/payloadcms
Version:
<p align="center"> <img alt="Payload AI Plugin" src="assets/payload-ai-intro.gif" width="100%" /> </p>
100 lines (99 loc) • 3.8 kB
JavaScript
import * as process from 'node:process';
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
import { getGenerationModels } from '../../../utilities/getGenerationModels.js';
import { getDefaultGenerationModels } from '../../models/index.js';
import { resolveProviderConfig } from '../resolveProviderConfig.js';
const providerEnvKeys = [
'ANTHROPIC_API_KEY',
'ANTHROPIC_AUTH_TOKEN',
'ANTHROPIC_BASE_URL',
'ELEVENLABS_API_KEY',
'GOOGLE_GENERATIVE_AI_API_KEY',
'MINIMAX_API_KEY',
'OPENAI_API_KEY',
'OPENAI_BASE_URL',
'OPENAI_ORG_ID',
'OPENAI_PROJECT'
];
const savedEnv = {};
beforeEach(()=>{
for (const key of providerEnvKeys){
savedEnv[key] = process.env[key];
delete process.env[key];
}
});
afterEach(()=>{
for (const key of providerEnvKeys){
const value = savedEnv[key];
if (value === undefined) {
delete process.env[key];
} else {
process.env[key] = value;
}
}
});
describe('resolveProviderConfig', ()=>{
it('falls back to environment variables when provider config is absent', ()=>{
process.env.OPENAI_API_KEY = 'env-openai-key';
process.env.OPENAI_BASE_URL = 'https://env-openai.example/v1';
process.env.OPENAI_ORG_ID = 'env-org';
const resolved = resolveProviderConfig();
expect(resolved.openai.apiKey).toBe('env-openai-key');
expect(resolved.openai.baseURL).toBe('https://env-openai.example/v1');
expect(resolved.openai.organization).toBe('env-org');
});
it('prefers explicit provider config over environment variables', ()=>{
process.env.OPENAI_API_KEY = 'env-openai-key';
process.env.OPENAI_BASE_URL = 'https://env-openai.example/v1';
process.env.OPENAI_ORG_ID = 'env-org';
const resolved = resolveProviderConfig({
openai: {
apiKey: 'config-openai-key',
baseURL: 'https://config-openai.example/v1',
orgId: 'config-org'
}
});
expect(resolved.openai.apiKey).toBe('config-openai-key');
expect(resolved.openai.baseURL).toBe('https://config-openai.example/v1');
expect(resolved.openai.organization).toBe('config-org');
});
it('registers default models from provider config without env keys', ()=>{
const models = getDefaultGenerationModels({
anthropic: {
apiKey: 'anthropic-key'
},
elevenLabs: {
apiKey: 'elevenlabs-key'
},
google: {
apiKey: 'google-key'
},
minimax: {
apiKey: 'minimax-key'
},
openai: {
apiKey: 'openai-key'
}
});
expect(models.some((model)=>model.id === 'Oai-text')).toBe(true);
expect(models.some((model)=>model.id === 'ANTH-C-text')).toBe(true);
expect(models.some((model)=>model.id === 'GEMINI-text')).toBe(true);
expect(models.some((model)=>model.id === '11Labs-m-v2')).toBe(true);
expect(models.some((model)=>model.id === 'MINIMAX-text')).toBe(true);
});
it('passes provider-configured defaults into generationModels callbacks', ()=>{
const pluginConfig = {
collections: {},
generationModels: (defaultModels)=>defaultModels.filter((model)=>model.id === 'GEMINI-text'),
providers: {
google: {
apiKey: 'google-key'
}
}
};
const models = getGenerationModels(pluginConfig);
expect(models).toHaveLength(1);
expect(models[0]?.id).toBe('GEMINI-text');
});
});
//# sourceMappingURL=resolveProviderConfig.test.js.map