From 3a1d07136c81f72411feefc77e8b62fc839f7b1c Mon Sep 17 00:00:00 2001 From: Danny Avila Date: Fri, 29 Mar 2024 10:43:36 -0400 Subject: [PATCH] =?UTF-8?q?=E2=9A=93=20refactor(loadConfigModels):=20Fallb?= =?UTF-8?q?ack=20to=20Default=20Models=20if=20Fetch=20Fails=20(#2236)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../services/Config/loadConfigModels.js | 2 + .../services/Config/loadConfigModels.spec.js | 62 +++++++++++++++++++ 2 files changed, 64 insertions(+) diff --git a/api/server/services/Config/loadConfigModels.js b/api/server/services/Config/loadConfigModels.js index b8e0f16f22..bfdb80b4ac 100644 --- a/api/server/services/Config/loadConfigModels.js +++ b/api/server/services/Config/loadConfigModels.js @@ -69,6 +69,8 @@ async function loadConfigModels(req) { apiKey: API_KEY, name, userIdQuery: models.userIdQuery, + }).then((result) => { + return !result?.length ? models.default ?? [] : result; }); uniqueKeyToNameMap[uniqueKey] = uniqueKeyToNameMap[uniqueKey] || []; uniqueKeyToNameMap[uniqueKey].push(name); diff --git a/api/server/services/Config/loadConfigModels.spec.js b/api/server/services/Config/loadConfigModels.spec.js index b49a0121de..695a59b03f 100644 --- a/api/server/services/Config/loadConfigModels.spec.js +++ b/api/server/services/Config/loadConfigModels.spec.js @@ -262,4 +262,66 @@ describe('loadConfigModels', () => { }), ); }); + + it('falls back to default models if fetching returns an empty array', async () => { + getCustomConfig.mockResolvedValue({ + endpoints: { + custom: [ + { + name: 'EmptyFetchModel', + apiKey: 'API_KEY', + baseURL: 'http://example.com', + models: { + fetch: true, + default: ['defaultModel1', 'defaultModel2'], + }, + }, + ], + }, + }); + + fetchModels.mockResolvedValue([]); + + const result = await loadConfigModels(mockRequest); + + expect(fetchModels).toHaveBeenCalledWith( + expect.objectContaining({ + name: 'EmptyFetchModel', + apiKey: 'API_KEY', + }), + ); + + expect(result.EmptyFetchModel).toEqual(['defaultModel1', 'defaultModel2']); + }); + + it('falls back to default models if fetching returns a falsy value', async () => { + getCustomConfig.mockResolvedValue({ + endpoints: { + custom: [ + { + name: 'FalsyFetchModel', + apiKey: 'API_KEY', + baseURL: 'http://example.com', + models: { + fetch: true, + default: ['defaultModel1', 'defaultModel2'], + }, + }, + ], + }, + }); + + fetchModels.mockResolvedValue(false); + + const result = await loadConfigModels(mockRequest); + + expect(fetchModels).toHaveBeenCalledWith( + expect.objectContaining({ + name: 'FalsyFetchModel', + apiKey: 'API_KEY', + }), + ); + + expect(result.FalsyFetchModel).toEqual(['defaultModel1', 'defaultModel2']); + }); });