Files
wehub-resource-sync e115934061
Publish `@librechat/data-schemas` to NPM / pack (push) Failing after 8s
Publish `@librechat/client` to NPM / pack (push) Failing after 0s
GitNexus Index / index (push) Failing after 1s
Sync Locize Translations & Create Translation PR / Create Translation PR on Version Published (push) Has been skipped
Sync Helm Chart Tags / Sync chart tags (push) Failing after 2s
Publish `librechat-data-provider` to NPM / pack (push) Failing after 1s
Docker Dev Images Build / build (Dockerfile, librechat-dev, node) (push) Failing after 1s
Docker Dev Images Build / build (Dockerfile.multi, librechat-dev-api, api-build) (push) Failing after 0s
Sync Helm Chart Tags / Ignore non-main push (push) Has been skipped
Sync Locize Translations & Create Translation PR / Sync Translation Keys with Locize (push) Failing after 1s
Publish `@librechat/client` to NPM / publish-npm (push) Has been cancelled
Publish `librechat-data-provider` to NPM / publish-npm (push) Has been cancelled
GitNexus Index / post-index (push) Has been cancelled
Publish `@librechat/data-schemas` to NPM / publish-npm (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:08:12 +08:00

165 lines
3.7 KiB
JavaScript

const OpenAI = require('openai');
const createOpenAIImageTools = require('~/app/clients/tools/structured/OpenAIImageTools');
jest.mock('openai');
jest.mock('@librechat/data-schemas', () => ({
logger: {
warn: jest.fn(),
error: jest.fn(),
debug: jest.fn(),
},
}));
jest.mock('@librechat/api', () => ({
logAxiosError: jest.fn(),
oaiToolkit: {
image_gen_oai: {
name: 'image_gen_oai',
description: 'Generate an image',
schema: {},
},
image_edit_oai: {
name: 'image_edit_oai',
description: 'Edit an image',
schema: {},
},
},
extractBaseURL: jest.fn((url) => url),
getProxyDispatcher: jest.fn(() => undefined),
applyAxiosProxyConfig: jest.fn(),
}));
jest.mock('~/server/services/Files/strategies', () => ({
getStrategyFunctions: jest.fn(),
}));
jest.mock('~/models', () => ({
getFiles: jest.fn().mockResolvedValue([]),
}));
describe('OpenAIImageTools - IMAGE_GEN_OAI_MODEL environment variable', () => {
let originalEnv;
beforeEach(() => {
jest.clearAllMocks();
originalEnv = { ...process.env };
process.env.IMAGE_GEN_OAI_API_KEY = 'test-api-key';
OpenAI.mockImplementation(() => ({
images: {
generate: jest.fn().mockResolvedValue({
data: [
{
b64_json: 'base64-encoded-image-data',
},
],
}),
},
}));
});
afterEach(() => {
process.env = originalEnv;
});
it('should use default model "gpt-image-1" when IMAGE_GEN_OAI_MODEL is not set', async () => {
delete process.env.IMAGE_GEN_OAI_MODEL;
const [imageGenTool] = createOpenAIImageTools({
isAgent: true,
override: false,
req: { user: { id: 'test-user' } },
});
const mockGenerate = jest.fn().mockResolvedValue({
data: [
{
b64_json: 'base64-encoded-image-data',
},
],
});
OpenAI.mockImplementation(() => ({
images: {
generate: mockGenerate,
},
}));
await imageGenTool.func({ prompt: 'test prompt' });
expect(mockGenerate).toHaveBeenCalledWith(
expect.objectContaining({
model: 'gpt-image-1',
}),
expect.any(Object),
);
});
it('should use "gpt-image-1.5" when IMAGE_GEN_OAI_MODEL is set to "gpt-image-1.5"', async () => {
process.env.IMAGE_GEN_OAI_MODEL = 'gpt-image-1.5';
const mockGenerate = jest.fn().mockResolvedValue({
data: [
{
b64_json: 'base64-encoded-image-data',
},
],
});
OpenAI.mockImplementation(() => ({
images: {
generate: mockGenerate,
},
}));
const [imageGenTool] = createOpenAIImageTools({
isAgent: true,
override: false,
req: { user: { id: 'test-user' } },
});
await imageGenTool.func({ prompt: 'test prompt' });
expect(mockGenerate).toHaveBeenCalledWith(
expect.objectContaining({
model: 'gpt-image-1.5',
}),
expect.any(Object),
);
});
it('should use custom model name from IMAGE_GEN_OAI_MODEL environment variable', async () => {
process.env.IMAGE_GEN_OAI_MODEL = 'custom-image-model';
const mockGenerate = jest.fn().mockResolvedValue({
data: [
{
b64_json: 'base64-encoded-image-data',
},
],
});
OpenAI.mockImplementation(() => ({
images: {
generate: mockGenerate,
},
}));
const [imageGenTool] = createOpenAIImageTools({
isAgent: true,
override: false,
req: { user: { id: 'test-user' } },
});
await imageGenTool.func({ prompt: 'test prompt' });
expect(mockGenerate).toHaveBeenCalledWith(
expect.objectContaining({
model: 'custom-image-model',
}),
expect.any(Object),
);
});
});